Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在二维python列表上迭代_Python_Loops_Multidimensional Array - Fatal编程技术网

在二维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