比较两个列表并删除匹配值

时间:2017-10-29 03:08:07

标签: python-3.x list

我有一个比较两个列表的功能,目的是删除两个列表中相同且位置相同的值。

def remove(l1, l2):
    r = []
    for char in range(len(l1)):
        if l1[char] != l2[char]:
             r.append(char)
    return r

虽然这会返回不同字符的索引,但我不确定如何让它从l1返回字符。

    remove(['S', 'T', 'U', 'V'], ['L', 'T', 'A', 'B'])
Expected:
    ['S', 'U', 'V']
Got:
    [0, 2, 3]

提前致谢!

3 个答案:

答案 0 :(得分:2)

这样可以,你只需要将l1中的字符添加到char中,而不是它们的索引:

def remove(l1, l2):
    r = []
    for char in range(len(l1)):
        if l1[char] != l2[char]:
             r.append(l1[char])
    return r

答案 1 :(得分:2)

要添加到erlinska的答案,您可以使用列表理解和zip将解决方案缩减为单行。

[c1 for c1, c2 in zip(l1, l2) if c1 != c2]

请注意,这两个列表具有相同的长度。如果它们具有不同的长度,则zip将仅返回n个元组,其中n是两个列表的最小长度。这意味着如果l1中的相同索引中没有项目,您可能会错过l2中的项目。

在上面的代码中,如果l2短于l1,您将遇到异常。

答案 2 :(得分:1)

简单使用zip:

def remove(l1, l2):
    return [first for first, second in zip(l1, l2) if first != second]

产生第一个列表中的项目:

remove(['S', 'T', 'U', 'V'], ['L', 'T', 'A', 'B'])
['S', 'U', 'V']