Reputation: 69
I want to iterate over my list of list and iterate over each item in each nested list.
below is an example of one of my list of lists (just an example - some of my lists of lists have 1 list others up to 5):
coord = [['1231778.27', '4953975.2109', '1231810.4031', '4953909.1625', '1231852.6845', '4953742.9888', '1231838.9939', '4953498.6317', '1232017.5436', '4953273.5602', '1232620.6037', '4953104.1389', '1233531.7826', '4953157.4443', '1233250.5928', '4952272.8482', '1233023.1992', '4951596.608', '1233028.445', '4951421.374', '1233113.3502', '4950843.6951', '1233110.1943', '4950224.8384', '1232558.1541', '4949702.3571', '1232009.4781', '4949643.5194', '1231772.6319', '4949294.7085', '1232228.9241', '4948816.677', '1232397.6873', '4948434.382', '1232601.4467', '4948090.1894', '1232606.6477', '4947951.0044', '1232575.7951', '4947814.7731', '1232577.9349', '4947716.6405', '1232581.1196', '4947587.4665', '1232593.5356', '4947302.0895', '1232572.993', '4947108.3982', '1232570.8043', '4947087.7615'],['1787204.7571', '5471874.7726', '1787213.6659', '5471864.3781', '1787230.0001', '5471864.3772', '1787238.9092', '5471870.3161']]
below is what I have come up with so far but I am having problems access the second list. at this stage I am just printing to trouble shoot but plan to pass these values to a function.
for i in range(0,len(coord),):
coord = coord[i]
for j in range(0,len(coord[:-3]),2):
x1 = coord[j]
y1 = coord[j+1]
x2 = coord[j+2]
y2 = coord[j+3]
print x1, y1, x2, y2
any points as to what I am doing wrong and how to achieve this would be much appreciated.
Upvotes: 1
Views: 298
Reputation: 86894
From your example code, it appears your inner list represent group of coordinates which are a series of "x1, y1, x2, y2, ...
" values.
IMHO, a more readable approach would be to use the grouper()
itertools recipe:
for row in coord:
for x1, y1, x2, y2 in grouper(row, 4): # assuming groups of 4
# use x1, x2, x3, x4 here
Here's an example that handles the values in groups of 2:
>>> for i, row in enumerate(coord):
... for x, y in grouper(row, 2):
... print "row=%d, (%s, %s)" % (i, x, y)
...
row=0, (1231778.27, 4953975.2109)
row=0, (1231810.4031, 4953909.1625)
row=0, (1231852.6845, 4953742.9888)
row=0, (1231838.9939, 4953498.6317)
row=0, (1232017.5436, 4953273.5602)
row=0, (1232620.6037, 4953104.1389)
row=0, (1233531.7826, 4953157.4443)
row=0, (1233250.5928, 4952272.8482)
row=0, (1233023.1992, 4951596.608)
row=0, (1233028.445, 4951421.374)
row=0, (1233113.3502, 4950843.6951)
row=0, (1233110.1943, 4950224.8384)
row=0, (1232558.1541, 4949702.3571)
row=0, (1232009.4781, 4949643.5194)
row=0, (1231772.6319, 4949294.7085)
row=0, (1232228.9241, 4948816.677)
row=0, (1232397.6873, 4948434.382)
row=0, (1232601.4467, 4948090.1894)
row=0, (1232606.6477, 4947951.0044)
row=0, (1232575.7951, 4947814.7731)
row=0, (1232577.9349, 4947716.6405)
row=0, (1232581.1196, 4947587.4665)
row=0, (1232593.5356, 4947302.0895)
row=0, (1232572.993, 4947108.3982)
row=0, (1232570.8043, 4947087.7615)
row=1, (1787204.7571, 5471874.7726)
row=1, (1787213.6659, 5471864.3781)
row=1, (1787230.0001, 5471864.3772)
row=1, (1787238.9092, 5471870.3161)
For completeness, the grouper()
method is defines as such:
from itertools import izip_longest
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
Upvotes: 0
Reputation: 3245
There is a lot of ways to do that.
То iterate all nested lists
for i in coord : for j in i : print j
To flatten your list by itertools
import itertools for i in itertools.chain(*coord) : print i
To flatten your list by reducing it
for i in sum(coord, []) : print i
Upvotes: 3
Reputation: 5486
This one is quiet simple. Look:
#Just two lists
coord1 = [ [1], [1,2], [1,2,3], [1,2,3,4] ]
coord2 = [ [1, 2, 3, 4, 5] ]
#iterate over the list of lists
for every_list in coord1:
print "List No. %i of leght %i" % (coord1.index(every_list), len(every_list))
print "Items :"
#print all items of actual list
for item in every_list:
print item
Output for coord1
:
List No. 0 of leght 1
Items :
1
List No. 1 of leght 2
Items :
1
2
List No. 2 of leght 3
Items :
1
2
3
List No. 3 of leght 4
Items :
1
2
3
4
Output for coord2
:
List No. 0 of leght 5
Items :
1
2
3
4
5
Upvotes: 0
Reputation: 34493
You could just do.
>>> for i in coord:
for j in i:
print j
1231778.27
4953975.2109
1231810.4031
4953909.1625
...
And so on.
Upvotes: 8