Skip to content Skip to sidebar Skip to footer

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"