我想删除列表中比给定日期晚的所有日期。我不明白为什么我的方法只删除列表中的一些项目。这就是我所拥有的:
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)]
答案 0 :(得分:2)
詹姆斯和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
答案 1 :(得分:0)
或者像这样修改:
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