提问人:gwydion93 提问时间:11/17/2023 最后编辑:phogwydion93 更新时间:11/17/2023 访问量:42
如何从列表中删除字符串项 [duplicate]
How to remove string items from a list [duplicate]
问:
假设我有一个字符串项列表,如下所示:
myList = ['CLIPPOLY', 'ExternalCrosswalk','CrossReference', 'SourceCitation', 'Status', 'Waterbody', 'N_1_EDesc', 'N_1_ETopo', 'N_1_JDesc', 'N_1_JTopo', 'N_1_Props', 'Line']
我想从列表中删除任何带有“N_1”的项目。很简单吧?我试过这个:
for item in myList:
if 'N_1' in item:
myList.remove(item)
print("Removed item: {}".format(item))
这将输出:
Removed item: N_1_EDesc
Removed item: N_1_JDesc
Removed item: N_1_Props
当我再次打印出 myList 时,我仍然可以看到并非所有带有“N_1”的项目都被删除了。为什么会发生这种情况,我该如何解决?
print(myList)
返回
['CLIPPOLY','ExternalCrosswalk','CrossReference','SourceCitation','Status','Waterbody','N_1_ETop', 'N_1_JTopo','Line']
注意 - 我也刚刚尝试创建一个我想要删除的名称列表,如下所示:
bad_list = ['N_1_EDesc', 'N_1_ETopo', 'N_1_JDesc', 'N_1_JTopo', 'N_1_Props']
然后,如果一个项目在bad_list中,我尝试将其删除,但我有相同的效果。
for item in myList:
if item in bad_list:
myList.remove(item)
print("Removed item: {}".format(item))
答:
1赞
Ajay Pun Magar
11/17/2023
#1
我建议您使用如下所示的列表推导式:
myList=[x for x in myList if 'N_1' not in x]
上面的代码将通过采用不包含“N_1”的项目来覆盖现有列表。
评论
2赞
ShadowRanger
11/17/2023
如果是您尝试修改的别名(例如,调用方在收到参数时需要更改),则行为会有所不同,并且将其重新绑定到新的不会更改其他别名中的原始别名。这样做将修改原始别名,以便所有别名也看到更改。myList
list
list
myList
list
list
myList[:] = [x for x in myList if 'N_1' not in x]
list
评论
for item in myList
myList[:]
list
list
.remove
O(n²)
list
list
O(n)
myList[:] = [item for item in myList if not item.startswith('N_1')]