【问题标题】:Remove element in list using list comprehension - Python使用列表理解删除列表中的元素 - Python
【发布时间】:2014-05-07 11:11:10
【问题描述】:

我有一个这样的列表:

['A','B','C']

我需要的是根据我在函数中得到的输入删除一个元素。例如,如果我决定删除 A 它应该返回:

['B','C']

我试过没有成功

list = ['A','B','C']
[var for var in list if list[var] != 'A']

我该怎么做? 谢谢

【问题讨论】:

标签: python list-comprehension


【解决方案1】:

简单的lst.remove('A') 可以工作:

>>> lst = ['A','B','C']
>>> lst.remove('A')
['B', 'C']

然而,对.remove 的一次调用只会删除列表中'A'第一次 出现。要删除所有 'A' 值,您可以使用循环:

for x in range(lst.count('A')):
    lst.remove('A')

如果你坚持使用列表推导,你可以使用

>>> [x for x in lst if x != 'A']
['B', 'C']

以上将删除 所有 等于 'A' 的元素。

【讨论】:

  • 在我非常长的列表的特定用例中,列表理解比 lst.remove 方法快得多。所以,我坚持使用它!
  • 此外,列表理解允许轻松添加条件删除(如果条件为真则删除)。很好的解决方案
【解决方案2】:

对您的代码的改进(几乎是正确的)将是:

list = ['A','B','C']
[var for var in list if var != 'A']

不过,@frostnational 的方法更好对于单一值。

如果您要列出要禁止的值,您可以这样做:

list = ['A','B','C', 'D']
not_allowed = ['A', 'B']
[var for var in list if var not in not_allowed]

【讨论】:

  • 谢谢,我认为为了更好的编码目的,我会接受其他答案!
【解决方案3】:

您可以只使用remove 列表方法。只需执行list.remove('A'),它将被删除。

如果您有要删除的项目的索引,请使用pop 方法。 list.pop(0).

【讨论】:

    【解决方案4】:

    如果您不确定元素是否存在,您可能需要在删除之前检查:

    if 'A' in lst:
        lst.remove('A')
    

    【讨论】:

      【解决方案5】:

      找到这个简化的代码:

      list1 = [12,24,35,24,88,120,155]
      
      while 24 in list1:
      
          list1.remove(24)
      
      print(list1)
      

      祝你好运!

      【讨论】:

        【解决方案6】:
        originalList=['A','B','C']
        print([val for val in originalList if val!='A'])
        

        打印出来

        ['B', 'C']
        

        【讨论】:

          【解决方案7】:

          你真的很亲密:

          list = ['A','B','C']
          [var for var in list if list[list.index(var)] != 'A']
          

          您尝试使用需要索引值的语法来引用列表项。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-05-07
            • 2021-11-20
            • 2021-04-23
            • 2019-07-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多