如何从列表[1,2,3,4]生成含自身配对的矩阵式tuple组合?
生成包含自身配对的元组笛卡尔积解决方案
你需要的是列表的笛卡尔积(所有有序对组合,包含元素与自身的配对),以下是两种直接实现的方法:
方法1:列表推导式
直接通过嵌套循环生成所有元组组合,天然满足格式和配对需求:
lst = [1, 2, 3, 4] result = [(x, y) for x in lst for y in lst] print(result)
运行后会输出:[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4)]
方法2:使用标准库itertools.product
Python标准库的itertools.product专门用于生成笛卡尔积,代码更简洁:
import itertools lst = [1, 2, 3, 4] result = list(itertools.product(lst, repeat=2)) print(result)
repeat=2表示用同一个列表重复两次计算乘积,返回的迭代器转成列表后就是目标结果。
为什么之前的代码不符合需求?
如果之前用的是itertools.combinations或combinations_with_replacement:
combinations生成的是无重复、不考虑顺序的组合(比如只有(1,2),没有(2,1)和(1,1))combinations_with_replacement允许自身配对,但同样不考虑顺序(只有(1,2),没有(2,1))
这两个都不满足你需要的全有序对+自身配对的要求,必须用笛卡尔积的实现方式。
内容的提问来源于stack exchange,提问作者toctoc
相关产品推荐
相关产品推荐

