Iterating over a 2 dimensional python list [duplicate]

I have created a 2 dimension array like:

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 

Printing this list gives an output:

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

where each list item is a string of the format 'row,column'

Now given this list, i want to iterate through it in the order:

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

that is iterate through 1st column then 2nd column and so on. How do i do it with a loop ?

This Question pertains to pure python list while the question which is marked as same pertains to numpy arrays. They are clearly different

1

7 Answers

same way you did the fill in, but reverse the indexes:

>>> 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 >>> 
4

This is the correct way.

>>> 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 >>> 
1

Use zip and itertools.chain. Something like:

>>> 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
>>> 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') 

zip will transpose the list, after that you can concatenate the outputs.

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

Ref: zip built-in function

zip() in conjunction with the * operator can be used to unzip a list

unzip_lst = zip(*mylist) for i in unzip_lst: for j in i: print j 
>>> [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'] 
3

You Might Also Like