在二维python列表上迭代
我创建了一个二维数组,如:在二维python列表上迭代,python,loops,multidimensional-array,Python,Loops,Multidimensional Array,我创建了一个二维数组,如: 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'
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'] ]
其中,每个列表项都是“行,列”格式的字符串
现在给出这个列表,我想按以下顺序遍历它:
'0,0'
'1,0'
'2,0'
'0,1'
'1,1'
'2,1'
也就是说,先遍历第一列,然后遍历第二列,依此类推。如何使用循环来完成它
这个问题涉及纯python列表,而标记为相同的问题涉及numpy数组。它们明显不同
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')]
使用
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']
来自itertools导入链的>>
>>>l=链从(拉链(*l))
>>>名单(l)
['0,0', '1,0', '2,0', '0,1', '1,1', '2,1']
>>[el[0]如果i
这是正确的方法
>>> 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
>>>
与您填写的方式相同,但将索引颠倒:
>>> 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
>>>
参考:
zip()
与*
运算符一起可用于解压缩列表
unzip_lst = zip(*mylist)
for i in unzip_lst:
for j in i:
print j
但是@Alexey的答案更好。为什么Alexey的答案更好?这只使用内置函数,而且似乎没有实质性地增加资源密集度。@Z4层此响应返回一个包含2个元组的列表。Alexey的答案是返回一个包含所有值的列表,我更喜欢zip方法,但我想我会抛出一个古怪的替代方法。这个方法是只计算len(myList)
一次,还是每次迭代都重新计算它?@Z4 tier@NominSim引用numpy数组,它不一定会转换为他的数组problem@AndyHayden事实上对于活跃的交互式shell用户来说,这没问题。使用直接变量名更新了答案。名称“l”不可用defined@SErgio l是一个列表……这应该是公认的答案,因为它简单易懂。人们可能不熟悉其他答案中使用的聪明函数,但只要快速查看一下代码,就可以清楚地看出此解决方案的工作原理。正因为如此,这个答案才是最有说服力的。。如果每个子列表没有保存长度(此处的行),该怎么办?@sonlexqt迭代最长行的索引并使用尝试。。。除了打印操作数周围的索引器
。(在我的单元格上,因此无法提供确切的示例)但如果行数大于列数,则此操作不起作用。这不是非常符合Python的。
>>> 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
>>>
unzip_lst = zip(*mylist)
for i in unzip_lst:
for j in i:
print j