这是惯例:
编写一个函数
(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
答案 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))