我有三个数组/列表:
list1 = range(1,10)
list2 = range(1,10)
list3 = range(1,10)
我想创建一个元组列表,其中包含我的三个列表中每个值的分类。基本上我想要一个输出,如:
combo = [(1,1,1), (1,1,2), (1,1,3) ... (1,4,2), (1,4,3) ... (4,5,4), (4,5,5) ... (10,10,9), (10,10,10)]
看起来像是一个简单的问题,但我不知道从哪里开始。
答案 0 :(得分:3)
您可以使用itertools.product
生成列表的笛卡尔积:
>>> import itertools
>>> list(itertools.product(list1, list2, list3))
[(1, 1, 1),
(1, 1, 2),
(1, 1, 3),
(1, 1, 4),
(1, 1, 5),
(1, 1, 6),
(1, 1, 7),
(1, 1, 8),
(1, 1, 9),
(1, 2, 1),
(1, 2, 2),
(1, 2, 3)
...
itertools.product(list1, list2, list3)
返回一个生成器对象 - 只有在迭代它时才会返回元组。在上面的示例代码中,list
用于将生成器的内容读入Python列表。
请注意,您还可以使用repeat
itertools
参数,当您的列表超出相同元素时,该list(itertools.product(list1, repeat=3))
参数更加整洁:
{{1}}
答案 1 :(得分:1)
如果我做对了,你想要一个3个列表的笛卡尔积?好吧,itertools
import itertools
result = list(itertools.product(list1, list2, list3))
答案 2 :(得分:-1)
您也可以创建一个列表并使用嵌套循环附加到它。请记住,如果您还想要数字10,则需要将范围更改为range(1, 11)
,以便它在数字11处停止。它就像一个< 11(不包括数字11)。
combo = []
for i in range(1, 11):
for j in range(1, 11):
for k in range(1, 11):
a = (i, j, k)
combo.append(a)
答案 3 :(得分:-3)
使用此:
combo=[]
for i in range(1,11):
for j in range(1,11):
for k in range(1,11):
combo.append( (i,j,k) )