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的顺序。