Возможный дубликат:
Удаление элементов из списка во время итерации в Python
Я хочу удалить все даты в списке, который позже указанной даты. Я не понимаю, почему мой метод удаляет только некоторые элементы списка. Вот что у меня есть:
import datetime
import numpy as np
import os
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):
list_dates.remove(item)
print list_dates
возвращается
[datetime.date(2012, 1, 1), datetime.date(2013, 1, 3)]
Джеймс и GWW правы, вы не можете изменить список, пока вы повторяете это. Вместо этого скопируйте элементы, которые вы хотите сохранить в новом списке.
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
Или измените это место так:
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
или
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 = 0
while i < len(list_dates):
item = list_dates[i]
if item > datetime.date(2012,1,1):
del list_dates[i]
else:
i += 1
print list_dates