Python列表减法

时间:2014-06-20 13:39:57

标签: python

这是惯例:

  

编写一个函数(list1, list2),它接受​​两个列表作为参数,并返回一个列表,该列表是从list1中删除可以在list2中找到的元素的结果。

为什么这个函数会像我想象的那样返回[1, 3, 4]而不是[4]?我认为这与list1.remove()有关。我想这很明显,但我看不到它。

它适用于以下示例:

subtractList (['a', 'b', 'c', 'd'], ['x', 'y', 'z']) =
    ['a', 'b', 'c', 'd']

subtractList([1,2,3,4,5], [2, 4]) =
    [1, 3, 5]

但对此失败了:

subtractList(range(5), range(4))

此外,我注意到它只删除列表中的偶数。

以下是代码:

def subtractList(list1,list2):
    list1 = list(list1)
    list2 = list(list2)

    for i in list1:
        if i in list2:
            list1.remove(i)

    return list1

我用以下方法解决了这个问题:

def subtractList(list1,list2):

    new_list = []

    list1 = list(list1)
    list2 = list(list2)

    for i in list1:
        if i not in list2:
            new_list.append(i)

    return new_list

2 个答案:

答案 0 :(得分:4)

迭代时更改列表会导致问题。你的第二个解决方案是体面的,或者你可以看看“列表理解”。在这种情况下:

new_list = [num for num in list1 if num not in list2]

答案 1 :(得分:4)

通过作弊来打动你的教授:

def subtract_list(l1, l2):
    return list(set(l1) - set(l2))
相关问题