Python:循环遍历多个列表并创建一个元组

时间:2014-04-19 03:00:34

标签: python

我有2个数据列表,我想为这个列表创建一个看起来像

的元组
ttuple=(1,[4,6,counter])

listA=[1,2,3,4,5,6,7,8,9]
listB=[3,4,5,7,8,9,0,-4,5]
counter=0
for i in range(len(listA)):
     for lista in listA:
         for listb in listB:
              data=(i,[lista,listb,counter])
              myList.append(data)
print(data)

仅打印最后一个值。有人能指出我做错了什么。它应该打印9个值的元组列表,如下所示。最后一个数字是一个递增1

的计数器
(0,[1,3,0),(1,[2,4,0]),(2,[3,5,0])

我得到的是以下内容:

(0,[1,1]),(0,[1,1]),(0,[1,1]), (1,[2,2]),(1,[2,2]),(1,[2,2])

3 个答案:

答案 0 :(得分:3)

您可以结合使用enumeratezip来获得所需内容:

>>> listA=[1,2,3,4,5,6,7,8,9]
>>> listB=[3,4,5,7,8,9,0,-4,5]
>>> output = []
>>> for i, a in enumerate(zip(listA, listB)):
...     output.append((i, [a[0], a[1], 0]))
...
>>> output
[(0, [1, 3, 0]),
 (1, [2, 4, 0]),
 (2, [3, 5, 0]),
 (3, [4, 7, 0]),
 (4, [5, 8, 0]),
 (5, [6, 9, 0]),
 (6, [7, 0, 0]),
 (7, [8, -4, 0]),
 (8, [9, 5, 0])]

答案 1 :(得分:1)

您可以使用列表理解:

output = [(ii,[b,c,counter]) for ii,(b,c) in enumerate(zip(listA,listB))]

答案 2 :(得分:0)

您提供的代码存在两个问题(无论如何我都能找到)。最大的事实是你生成len(listA)** 2 * len(listB)元素!您不必迭代listA和listB,而是使用索引i访问两个列表中的元素。另一个问题是myList没有定义(但我假设你忘记了)。

以下是解决此问题的更有趣方式:

from itertools import izip
n = len(min(listA, listB))
result = list(enumerate(izip(listA, listB, xrange(n))))
print(result)

然而,这将为您提供无处不在的元组,以匹配确切的输出:

from itertools import izip
n = len(min(listA, listB))
result = list(enumerate(list(item) for item in izip(listA, listB, xrange(n))))
print result