迭代2维python列表

bha*_*arc 39 python loops multidimensional-array

我创建了一个2维数组,如:

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
Run Code Online (Sandbox Code Playgroud)

打印此列表会显示输出:

[  ['0,0', '0,1'], ['1,0', '1,1'], ['2,0', '2,1']   ]
Run Code Online (Sandbox Code Playgroud)

其中每个列表项都是"行,列"格式的字符串

现在给出这个列表,我想按顺序迭代它:

'0,0'
'1,0'
'2,0'
'0,1'
'1,1'
'2,1'
Run Code Online (Sandbox Code Playgroud)

这是迭代第一列然后第二列,依此类推.我如何用循环做到这一点?

这个问题属于纯python列表,而标记为相同的问题属于numpy数组.他们显然是不同的

Ili*_*bev 83

填写方式相同,但反转索引:

>>> 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
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,因为它简单易懂.人们可能不熟悉其他答案中使用的聪明功能,但只需快速查看代码,这个解决方案的工作原理就很明显了.因此,这个答案是最恐怖的. (14认同)
  • 嗯..如果每个子列表都没有保存长度(行在这里)怎么办? (2认同)

mrK*_*ley 61

这是正确的方法.

>>> 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
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 这不是很Pythonic。 (2认同)

Ale*_*yev 22

使用zipitertools.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']
Run Code Online (Sandbox Code Playgroud)

  • 名称“l”未定义 (2认同)

Jor*_*ley 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')
Run Code Online (Sandbox Code Playgroud)