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() 不删除所有匹配项[重复]的主要内容,如果未能解决你的问题,请参考以下文章