Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表减法_Python - Fatal编程技术网

Python列表减法

Python列表减法,python,Python,这是一个实践示例: 编写一个函数(list1,list2),该函数接受两个列表作为参数,并返回一个列表,该列表是从list1中删除元素的结果,可以在list2中找到 为什么这个函数返回[1,3,4],而不是像我想的那样返回[4]?我认为这与list1.remove()有关。我想这很明显,但我看不到 它适用于以下示例: subtractList (['a', 'b', 'c', 'd'], ['x', 'y', 'z']) = ['a', 'b', 'c', 'd'] subtractL

这是一个实践示例:

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

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

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

通过作弊给教授留下深刻印象:

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

请修改格式,特别是缩进。目前很难为您提供帮助。您使用的是Python 3还是Python 2?另外,由于您已经传入列表(范围(x)也是一个列表),因此将它们再次转换为列表(
list1=list(list1)
)是不必要的一致编辑:(Python3,yes range还返回一个列表,我想确定如果有人输入tuple之类的内容,它仍然会发挥作用,对于Python初学者来说,我认为错误的原因一点也不明显。:)是的,我也考虑过这可能会改变列表1的顺序。