每次迭代访问列表列表中的所有子元素

时间:2014-12-05 08:44:12

标签: python

我有列表列表,我想循环遍历列表,并且每次迭代我想访问列表的ith子元素。

例如:

a = [[1, 3, 4], [2, 4, 4], [3, 7, 5]]

我想做这样的事情

   for i in range(len(a)):
        x=a[i]

第一次迭代我想从所有子列表中访问0元素(即)1,2,3

进行第二次迭代我想从所有子列表中访问1 st元素(即)3,4,7

我尝试了几种方法但失败了,有没有诀窍呢

4 个答案:

答案 0 :(得分:5)

您可以使用zip

s =  [[1, 3, 4], [2, 4, 4], [3, 7, 5]]
print zip(*s)
#[(1, 2, 3), (3, 4, 7), (4, 4, 5)]

答案 1 :(得分:0)

def get_column(n, table):
    result = []
    for line in table:
        result.append(line[n])
    return result

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

for i in range(len(test[0])):
    print(get_column(i, test))

执行:

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

答案 2 :(得分:0)

如上面的回答所述,您可以使用zip优雅的方式,但如果您想要在每次迭代中访问列,并且不想一次性获取所有这些 itertools.izip正是您要找的,itertools.izip返回一个生成器,您可以在每次迭代中获得结果:

>>> from itertools import izip
>>> for i in izip(*a):
...  print i
... 
(1, 2, 3)
(3, 4, 7)
(4, 4, 5)

此外,您可以在pop循环中使用for(性能低于izip):

>>> a = [[1, 3, 4], [2, 4, 4], [3, 7, 5]]
>>> test=[]
>>> for i in range(len(a[0])):
...   for j in a:
...    test.append(j.pop(0))
...   print test
...   test=[]
... 
[1, 2, 3]
[3, 4, 7]
[4, 4, 5]

答案 3 :(得分:0)

替代zip方法,

>>> a = [[1, 3, 4], [2, 4, 4], [3, 7, 5]]
>>> new_list = []
>>> for k,v in enumerate(a):
...     new_list.append([])
...     for item in a:
...             new_list[-1].append(item[k])
... 
>>> new_list
[[1, 2, 3], [3, 4, 7], [4, 4, 5]]