Python 列表减法

5 投票
2 回答
1570 浏览
提问于 2025-04-18 10:30

这是一个练习示例:

写一个函数 (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 个回答

4

用作弊来让你的教授刮目相看:

def subtract_list(l1, l2):
    return list(sorted(set(l1) - set(l2)))
4

在遍历一个列表的时候,如果你同时修改这个列表,会出现问题。你提到的第二种解决方案还不错,或者你可以看看“列表推导式”。在这个情况下:

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

撰写回答