Python 列表减法
这是一个练习示例:
写一个函数
(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]