web-dev-qa-db-fra.com

Itération sur une liste en 2 dimensions python list

J'ai créé un tableau à 2 dimensions comme:

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

L'impression de cette liste donne une sortie:

[  ['0,0', '0,1'], ['1,0', '1,1'], ['2,0', '2,1']   ]

où chaque élément de la liste est une chaîne de format "rangée, colonne"

Maintenant, étant donné cette liste, je veux parcourir cette liste dans l’ordre:

'0,0'
'1,0'
'2,0'
'0,1'
'1,1'
'2,1'

c'est-à-dire parcourir la 1ère colonne puis la 2ème colonne et ainsi de suite. Comment puis-je le faire avec une boucle?

Cette question concerne la liste pure python), tandis que la question portant le même signe concerne les tableaux numpy. Ils sont clairement différents

36
bhaskarc

Utilisez Zip et itertools.chain. Quelque chose comme:

>>> 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']
21
Alexey Kachayev

de la même manière, vous avez rempli, mais inversé les index:

>>> 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
>>> 
77
Iliyan Bobev

C'est la bonne façon.

>>> 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
>>> 
57
mrKelley
>>> 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')
5
Joran Beasley

Zip transposera la liste, après quoi vous pourrez concaténer les sorties.

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')]
3
Adrian Ratnapala

Ref: fonction intégrée Zip

Zip() en conjonction avec le * opérateur peut être utilisé pour unzip une liste

unzip_lst = Zip(*mylist)
for i in unzip_lst:
    for j in i:
        print j
2
Tanky Woo
>>> [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']
1
dansalmo