这是一个练习的例子:
编写一个函数
(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)
在迭代列表时更改列表会导致问题。你的第二个解决方案是不错的,或者你可以查看“列表理解”。在这种情况下:
new_list = [num for num in list1 if num not in list2]
Run Code Online (Sandbox Code Playgroud)