我创建了一个二维数组,如:
rows =3
columns= 2
mylist = [[0 for x in range(columns)] for x in range(rows)]
for i in range(rows):
for j in range(columns):
mylist[i][j] = '%s,%s'%(i,j)
print mylist
打印此列表会显示输出:
[ ['0,0', '0,1'], ['1,0', '1,1'], ['2,0', '2,1'] ]
其中每个列表项都是格式为'row,column'的字符串
现在给出这个列表,我想按顺序遍历它:
'0,0'
'1,0'
'2,0'
'0,1'
'1,1'
'2,1'
迭代第一列然后第二列,依此类推。我如何用循环做到这一点?
此问题属于纯python列表,而标记为相同的问题属于numpy数组。他们显然是不同的
答案 0 :(得分:71)
与填写相同的方式,但反转索引:
>>> for j in range(columns):
... for i in range(rows):
... print mylist[i][j],
...
0,0 1,0 2,0 0,1 1,1 2,1
>>>
答案 1 :(得分:48)
这是正确的方法。
>>> x = [ ['0,0', '0,1'], ['1,0', '1,1'], ['2,0', '2,1'] ]
>>> for i in range(len(x)):
for j in range(len(x[i])):
print(x[i][j])
0,0
0,1
1,0
1,1
2,0
2,1
>>>
答案 2 :(得分:20)
使用zip
和itertools.chain
。类似的东西:
>>> from itertools import chain
>>> l = chain.from_iterable(zip(*l))
<itertools.chain object at 0x104612610>
>>> list(l)
['0,0', '1,0', '2,0', '0,1', '1,1', '2,1']
答案 3 :(得分:5)
>>> mylist = [["%s,%s"%(i,j) for j in range(columns)] for i in range(rows)]
>>> mylist
[['0,0', '0,1', '0,2'], ['1,0', '1,1', '1,2'], ['2,0', '2,1', '2,2']]
>>> zip(*mylist)
[('0,0', '1,0', '2,0'), ('0,1', '1,1', '2,1'), ('0,2', '1,2', '2,2')]
>>> sum(zip(*mylist),())
('0,0', '1,0', '2,0', '0,1', '1,1', '2,1', '0,2', '1,2', '2,2')
答案 4 :(得分:2)
zip
将转置列表,之后您可以连接输出。
In [3]: zip(*[ ['0,0', '0,1'], ['1,0', '1,1'], ['2,0', '2,1'] ])
Out[3]: [('0,0', '1,0', '2,0'), ('0,1', '1,1', '2,1')]
答案 5 :(得分:2)
zip()
与*
运算符一起用于unzip
列表
unzip_lst = zip(*mylist)
for i in unzip_lst:
for j in i:
print j
答案 6 :(得分:1)
>>> [el[0] if i < len(mylist) else el[1] for i,el in enumerate(mylist + mylist)]
['0,0', '1,0', '2,0', '0,1', '1,1', '2,1']