使用Python 2.7
。我们说我们有list_of_nums = [1,2,2,3,4,5]
我们想要删除所有出现的2.我们可以实现它
list_of_nums[:] = filter(lambda x: x! = 2, list_of_nums)
或list_of_nums = filter(lambda x: x! = 2, list_of_nums)
。
这是"就地"代换?另外,我们在使用过滤器时是否创建了列表副本?
答案 0 :(得分:5)
list_of_nums[:] = filter(lambda x: x != 2, list_of_nums)
和
list_of_nums = filter(lambda x: x != 2, list_of_nums)
是两个不同的操作,最终 结果相同。
在这两种情况下,
filter(lambda x: x != 2, list_of_nums)
返回一个包含与过滤器匹配的项目的新列表(在Python 2中),或者返回一个返回相同项目的list_of_nums
的可迭代项目(在Python 3中)。
第一种情况,
list_of_nums[:] = filter(lambda x: x != 2, list_of_nums)
然后删除list_of_nums
中的所有项目,并将其替换为新列表中的项目或可迭代项目。
第二种情况,
list_of_nums = filter(lambda x: x != 2, list_of_nums)
将新列表分配给变量list_of_nums
。
这会产生影响的时间是:
def processItemsNotTwo_case1(list_of_nums):
list_of_nums[:] = filter(lambda x: x != 2, list_of_nums)
# do stuff here
# return something
def processItemsNotTwo_case2(list_of_nums):
list_of_nums = filter(lambda x: x != 2, list_of_nums)
# do stuff here
# return something
list1 = [1,2,2,3,4,5]
processItemsNotTwo_case1(list1)
list2 = [1,2,2,3,4,5]
processItemsNotTwo_case2(list2)
使用此代码,list1
以新内容[1,3,4,5]
结束,而list2
以原始内容[1,2,2,3,4,5]
结束。