创建包含从数组中获取的值的元组列表的最佳方法是什么?

时间:2015-03-10 20:50:05

标签: python arrays list

我有三个数组/列表:

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)]

看起来像是一个简单的问题,但我不知道从哪里开始。

4 个答案:

答案 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) )