for循环忽略了我列表中的一些元素

时间:2011-09-05 16:10:26

标签: python loops for-loop

  

可能重复:
  Remove items from a list while iterating in 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)]

2 个答案:

答案 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