如何垂直遍历列表?

时间:2014-01-22 02:45:14

标签: list loops for-loop python-3.x collections

我有多个要处理的列表。我要做的是在垂直列中为每个列表(在本例中为索引1,2和3)取一个索引。并将这些垂直数字添加到空列表中。

line1=[1,2,3,4,5,5,6]
line2=[3,5,7,8,9,6,4]
line3=[5,6,3,7,8,3,7]

vlist1=[]
vlist2=[]
vlist3=[]

预期产出

Vlist1=[1,3,5] 
Vlist2=[2,5,6]
Vlist3=[3,7,3]

4 个答案:

答案 0 :(得分:5)

在其中包含带数字的变量通常是设计错误。相反,您可能应该有一个嵌套的数据结构。如果您使用line1line2line3列表执行此操作,则会获得嵌套列表:

lines = [[1,2,3,4,5,5,6],
         [3,5,7,8,9,6,4],
         [5,6,3,7,8,3,7]]

然后,您可以使用zip

“转置”此列表列表
vlist = list(zip(*lines)) # note the list call is not needed in Python 2

现在,您可以通过索引或切片到转置列表来访问内部列表(现在实际上是元组)。

first_three_vlists = vlist[:3]

答案 1 :(得分:1)

在python 3中zip返回一个生成器对象,你需要将其视为一个:

from itertools import islice

vlist1,vlist2,vlist3 = islice(zip(line1,line2,line3),3)

但你真的应该keep your data out of your variable names。使用list-of-lists数据结构,如果你需要转置它,只需执行:

list(zip(*nested_list))
Out[13]: [(1, 3, 5), (2, 5, 6), (3, 7, 3), (4, 8, 7), (5, 9, 8), (5, 6, 3), (6, 4, 7)]

答案 2 :(得分:0)

使用pythons zip()函数,相应地编制索引。

>>> line1=[1,2,3,4,5,5,6]
>>> line2=[3,5,7,8,9,6,4]
>>> line3=[5,6,3,7,8,3,7]
>>> zip(line1,line2,line3)
[(1, 3, 5), (2, 5, 6), (3, 7, 3), (4, 8, 7), (5, 9, 8), (5, 6, 3), (6, 4, 7)]

答案 3 :(得分:0)

将输入列表放入列表中。然后创建第i个vlist,执行以下操作:

vlist[i] = [];
for l in list_of_lists:
    vlist[i].append(l[i])