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

发布于 2024-12-03 10:04:43 字数 688 浏览 0 评论 0原文

可能的重复:
在 Python 中迭代时从列表中删除项目 < /p>

想要删除列表中晚于给定日期的所有日期。我不明白为什么我的方法只删除列表中的某些项目。这就是我得到的:

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)]

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 only removes some items of the list. Here's what I've got:

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

returns

[datetime.date(2012, 1, 1), datetime.date(2013, 1, 3)]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泪之魂 2024-12-10 10:04:43

James 和 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

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
入怼 2024-12-10 10:04:43

或者像这样就地修改:

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

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 = 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文