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
17 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 >>> 4This 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 >>> 1Use 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')] 3zip() 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