【问题标题】:How to remove all items in a list that are in another list in Python 3? [duplicate]如何在 Python 3 中删除列表中另一个列表中的所有项目? [复制]
【发布时间】:2021-01-21 09:52:46
【问题描述】:

我正在尝试编写一个将两个列表作为输入的函数:def array_diff(a, b):。在这个函数中,我想返回一个过滤的a 列表,该列表将删除列表b 中也存在的所有项目。它会这样工作:

array_diff([1,2],[1]) == [2]

或者:

array_diff([1,2,2,2,3],[2]) == [1,3]

我写了以下代码:

def array_diff(a, b):
    for i in a:
        if i in b:
            a.remove(i)      
    return a

但即使我没有收到任何错误,当我尝试运行此函数并列出 a 有两个具有相同值的项目,并且它存在于列表 b 中时,它并没有正确过滤它。我不确定为什么会这样,但我已经尝试过使用a.pop(i),但也没有用。我还尝试使用for i in range(len(a)) 遍历列表,但我收到错误消息说我遍历了列表的索引。

希望你能帮助我,谢谢!

【问题讨论】:

  • 迭代时不要移除元素。
  • it doesn't filter it properly。请解释一下,给出一个最小的可重现示例
  • sets 可能会使这变得容易得多。
  • @AAAlex123 在这里:a was [1,2,2], b was [2], expected [1]: [1, 2] should equal [1]

标签: python python-3.x list function


【解决方案1】:

使用filter 函数过滤掉两个列表中存在的任何项目,如下所示:

def array_diff(a, b):    
    return list(filter(lambda item: item not in ls2, ls1))

ls1 = [1, 2, 3, 4, 5]
ls2 = [2, 5]
print(array_diff(ls1, ls2))

【讨论】:

    【解决方案2】:

    有一个更简单的方法 例如。

    a = [1,2,2,2,2,3]
    b = [2]
    c = list(set(a)-set(b)) # for output in list
    print(c)
    

    【讨论】:

    • 这将从列表 a 中删除不在列表 b 中的重复项
    • 哦,是的,我没有考虑过,我会尽快编辑它。
    【解决方案3】:

    如果您只需要唯一值,那么:

    def array_diff(a, b):     
        return set(a) - set(b)
    

    【讨论】:

    • 嘿!这没用...
    • @JohnRayburn“没用”是对它如何没用的有用描述。
    • @superbrain,这并没有给出任何错误,但所有输出都是错误的。
    • @JohnRayburn “没用”是什么意思?
    • @busfighter 我在之前的评论中回答了这个问题。谢谢!
    猜你喜欢
    • 2011-01-31
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2022-07-29
    • 2019-10-09
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多