Python列表减法

Jas*_*sko 5 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]
Run Code Online (Sandbox Code Playgroud)

但是失败了:

subtractList(range(5), range(4))
Run Code Online (Sandbox Code Playgroud)

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

这是代码:

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

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

    return list1
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

thu*_*ief 4

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

new_list = [num for num in list1 if num not in list2]
Run Code Online (Sandbox Code Playgroud)