在我试图从列表中删除不包含冒号的元素的情况下,Remove()对我而言无法正常工作。这是我的清单;
myList = ['hosts:127.0.0.1','-nU','-nT','-cA','-nB']
先做separated = myList.split(',')
,然后
for i in separated:
if ':' not in i:
separated.remove(i)
print separated
以['hosts:127.0.0.1', '-nT', '-nB']
作为输出离开了我。我假设这是因为remove()仅删除第一个匹配的元素。但这仍然不能解释为什么-nt和-nb会在那里。有什么更好的选择呢?
谢谢
答案 0 :(得分:7)
迭代时请不要修改列表。
改为使用副本,或者更惯用的是列表理解:
separated = [i for i in myList if ':' in i]
答案 1 :(得分:1)
问题在于删除元素时您正在遍历列表。考虑一下对您的代码的小改动:
myList = ['hosts:127.0.0.1','-nU','-nT','-cA','-nB']
for i in myList :
print(i)
if ':' not in i:
myList.remove(i)
输出:
hosts:127.0.0.1
-nU
-cA
因此,您的for循环实际上不会查看列表中的两个条目。 您可以考虑按照jpp的建议在此处使用列表理解。
答案 2 :(得分:0)
使用for循环遍历列表的每个元素
像这样
for i in range(0,len(myList)-1):
if ":" not in myList[i]:
myList.remove(myList[i])