我有列表列表,我想循环遍历列表,并且每次迭代我想访问列表的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
我尝试了几种方法但失败了,有没有诀窍呢
答案 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]]