【问题标题】:Python3: How to remove list items with another list item(s)Python3:如何使用另一个列表项删除列表项
【发布时间】:2018-06-14 00:44:53
【问题描述】:

我有两个列表:

     a = ['eggs', 'eggs', 'spam', 'ham', 'eggs']

和:

     b = ['e', 'e']

我希望能够从列表 a 中删除鸡蛋。 根据列表 b 中的 e。 所以我理想的输出是:

     a = ['spam', 'ham', 'eggs']

由于列表 a 中只有 2 个 e。

我试过了:

     [a.remove('eggs') for e in b if e =='e' for eggs in a if eggs=='eggs']

问题在于这种列表理解会删除所有鸡蛋。 告诉我pythonic的方式!

【问题讨论】:

  • 你能解释一下你的逻辑吗?您是否要删除a 中以“e”开头的前两项?列表b 是否总是由单个字母n 次组成?
  • @jpp 列表 b 中有两个 e,所以我想删除列表 a 中的“鸡蛋”,具体取决于列表 b 中有多少个 e
  • @D.Vidal jpp 更紧迫的问题是 - 这些'e's 完全是任意字符串吗?出于某种原因,您只关心'eggs'?或者它们是否匹配'eggs' 中的第一个字符?您的问题陈述相当模糊。
  • @miradulo 是的,这些都是任意的

标签: python-3.x for-loop if-statement list-comprehension


【解决方案1】:
a = ['eggs', 'eggs', 'spam', 'ham', 'eggs']
b = ['e', 'e']

for e in b:
    if e == "e":
        a.remove("eggs")

print(a)

这不是一行,但它应该可以工作。

【讨论】:

    【解决方案2】:

    您不应在列表推导中使用lst.remove。由于此方法会改变您的列表并返回 None,因此您对输出不感兴趣,应该改用 for 循环。

    您可以使用lst.count 在第二个列表中找出'e' 的出现次数,然后在第二个列表中使用lst.remove

    a = ['eggs', 'eggs', 'spam', 'ham', 'eggs']
    b = ['e', 'e']
    
    for _ in range(b.count('e')):
        a.remove('eggs')
    
    print(a) # ['spam', 'ham', 'eggs']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2011-02-14
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多