从列表中完全删除一个项目

时间:2014-02-12 11:51:09

标签: python list

如果我有这样的清单:

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

如何从列表中删除所有项目“hi”?我尝试过remove()方法,但它只能运行一次:

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

是的,我可以这样做:

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

但有没有人知道比同一指令的n次迭代更优雅的方式?

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

使用列表理解:

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

这会将列表重建为仅包含不等于'hi'的值。

list.remove()次调用必须将列表项的其余部分向前移动,而使用列表推导更有效。

答案 2 :(得分:2)

我猜你可以使用过滤功能。 这是文档:filter docs

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函数可以更短

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

答案 3 :(得分:0)

您也可以使用生成器表达式:

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

然后你可以将其作为NewList.next()进行迭代,直到它引发StopIteration。