【问题标题】:How to delete all instance names in a list? [duplicate]如何删除列表中的所有实例名称? [复制]
【发布时间】:2011-07-14 06:58:25
【问题描述】:

可能重复:
Remove all occurences of a value from a Python list

mylist = ['dogs', 'cats', 'cats']

如果我输入mylist.remove('cats'),它只会删除我列表中的一只猫,但我想删除我列表中的所有猫而不使用循环,因为循环会以我想要的方式崩溃。

编辑:这是一个解释的小技巧,例如,它会崩溃,因为我正在尝试开发一个模块来从列表中删除相等的元素。 mylist[i] 首先返回狗,我将其删除,但在另一个循环之后,mylist[i] 不再返回狗,而是返回猫。这就是为什么我想在一个语句中删除所有实例而不考虑索引循环。

【问题讨论】:

  • “循环会按照我想要的方式崩溃”是什么意思?

标签: python


【解决方案1】:

没有用于从列表中删除所有元素的内置方法。您必须使用循环。有什么问题:

In [129]: x=['dog','cat','cat']
In [136]: [elt for elt in x if elt!='cat']
Out[136]: ['dog']

?

【讨论】:

    【解决方案2】:

    您可以使用列表推导创建一个新列表以避免显式循环:

    mylist = [item for item in mylist if item != 'cats']
    

    【讨论】:

    • 请注意,如果您想就地修改列表,可以使用mylist[:] = ...,但会降低效率(额外的副本)。
    【解决方案3】:

    除非提供的列表副本必须就地修改,否则我建议过滤。

    >>> x = itertools.ifilter(lambda x: x != 'foo', ['foo', 'foo', 'bar'])
    >>> x
    <itertools.ifilter object at 0xb70ba2ec>
    >>> list(x)
    ['bar']
    

    【讨论】:

    • 列表推导式(或生成器表达式)在 Python 中更清晰、更惯用。
    猜你喜欢
    • 2021-01-06
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    相关资源
    最近更新 更多