For Loop Ignores Some Elements Of My List
Possible Duplicate: Remove items from a list while iterating in Python I want to remove all the dates in a list which are later than a given date. I can't see why my method onl
Solution 1:
James and GWW are right, you cant modify the list while you are iterating through the same. Instead copy the items which you want to keep to a new list.
list_dates = [datetime.date(2012,1,3), datetime.date(2012,1,1), datetime.date(2012,1,5), datetime.date(2013,1,3), datetime.date(2013,1,1)]
for item in list_dates:
if item < datetime.date(2012,1,1):
new_list_dates.add(item); // move this item (which you want to keep) to a new list.
print new_list_dates
Solution 2:
Or modify in place like this:
import datetime
list_dates = [datetime.date(2012,1,3), datetime.date(2012,1,1), datetime.date(2012,1,5), datetime.date(2013,1,3), datetime.date(2013,1,1)]
for i in range(len(list_dates) - 1, -1, -1):
item = list_dates[i]
if item > datetime.date(2012,1,1):
del list_dates[i]
print list_dates
or
import datetime
list_dates = [datetime.date(2012,1,3), datetime.date(2012,1,1), datetime.date(2012,1,5), datetime.date(2013,1,3), datetime.date(2013,1,1)]
i = 0while i < len(list_dates):
item = list_dates[i]
if item > datetime.date(2012,1,1):
del list_dates[i]
else:
i += 1print list_dates
Post a Comment for "For Loop Ignores Some Elements Of My List"