Python startswith() 不删除所有匹配项[重复]

Posted

技术标签:

【中文标题】Python startswith() 不删除所有匹配项[重复]【英文标题】:Python startswith() not removing all matches [duplicate] 【发布时间】:2020-05-30 04:27:52 【问题描述】:

不确定我是否在这里做任何愚蠢的事情,但我正在尝试删除以 00:00:00. 开头的列表中的所有项目,但并非所有项目都匹配。

tc = ['00:00:00.360', '00:00:00.920', '00:00:00.060', '00:00:02.600', '00:00:05.960', '00:00:01.040', '00:00:01.140', '00:00:01.060', '00:00:01.480', '00:00:00.140', '00:00:00.280', '00:00:01.200', '00:00:00.400', '00:00:01.220', '00:00:00.380']
for item in tc:
    if item.startswith(str('00:00:00.')):
        tc.remove(item)
print (tc)

结果:

['00:00:00.920', '00:00:02.600', '00:00:05.960', '00:00:01.040', '00:00:01.140', '00:00:01.060', '00:00:01.480', '00:00:00.280', '00:00:01.200', '00:00:01.220']

预期结果:

['00:00:02.600', '00:00:05.960', '00:00:01.040', '00:00:01.140', '00:00:01.060', '00:00:01.480', '00:00:01.200', '00:00:01.220']

知道这里可能是什么问题吗?

【问题讨论】:

在迭代过程中不要从列表中删除!迭代器位置发生变化,这就是它不会删除所有内容的原因。 这回答了你的问题:strange result when removing item from a list 这能回答你的问题吗? Looping over list and removing entries in Python @h4z3:我的年龄大了几岁。 “自 2011 年以来,令人困惑的人群!” @usr2564301 我在报告重复时找不到好问题,其中有很多。 :D 【参考方案1】:

那是因为您在迭代时更改了tc。 您可以通过简单的列表理解来实现您的目标:

tc = [item for item in tc if not item.startswith('00:00:00.')]

【讨论】:

或者您可以创建列表的副本,并仅在该新列表中删除。 @Tal 给出的解决方案更好,但也许“创建副本”更容易理解。 要了解这个列表枚举,请访问***.com/questions/22620091/…

以上是关于Python startswith() 不删除所有匹配项[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python的startswith与endswith函数

Discord.py 删除除 pin 消息之外的所有消息

Python 字符串内置方法

Python startswith()方法

IE 中不支持startsWith 方法有任何替代方法吗? [复制]

Python startswith()函数 与 endswith函数