关于python:从列表中完全删除一个项目

Completely remove one item from a list

本问题已经有最佳答案,请猛点这里访问。

如果我有这样的清单:

1
MyList = [1,2,3,4,5,'hi', 6,7, 'hi', 8, 'hi', 9]

如何从列表中删除所有"hi"项?我尝试过remove()方法,但它只工作一次:

1
2
3
MyList.remove('hi')
>>>> MyList
[1,2,3,4,5,6,7,'hi',8,'hi',9]

是的,我可以这样做:

1
2
while 'hi' in MyList:
    MyList.remove('hi')

但是有人知道比重复n次相同的指令更优雅的方法吗?


O(N**2)while 'hi' in MyList: MyList.remove('hi')是更好的理解,使用一个简单的列表,这是同样的事情在O(N)时间:

1
MyList = [item for item in MyList if item != 'hi']


使用列表的理解:

1
MyList = [v for v in MyList if v != 'hi']

本rebuilds列表只包含一个值'hi'不平等。

在其余的移动电话必须list.remove()列表项列表的理解而不是前锋,使用A是更高效的。


我想你可以使用过滤功能。这里是文档:文档过滤

1
2
3
4
5
6
7
8
9
10
MyList = [1,2,3,4,5,'hi', 6,7, 'hi', 8, 'hi', 9]

def f(item, element="hi"):
    if item == element:
        return False
    else:
        return True

print filter(f, MyList)
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]

感谢Tim,他pietzcker改善。F函数可能是短的

1
def f(item, element="hi"): return item != element


你可以这样表达:使用发电机

1
NewList = (x for x in MyList if x != 'hi')

然后你可以iterate本为NewList.next()直到它stopiteration RAISE。