列出remove()的麻烦

时间:2018-06-26 12:17:33

标签: python list

在我试图从列表中删除不包含冒号的元素的情况下,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会在那里。有什么更好的选择呢?

谢谢

3 个答案:

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