您的基本问题是input_list[:]
仅是浅表副本;如果它本身包含可变内容(在本例中为嵌套list
),则它与可变数据共享别名,并且在“副本”中对其进行修改仍会修改原始数据的内容结构。
如果您不能使用copy
模块,并且已经知道list
的2D排列,只需自己执行深度复制,然后进行以下更改:
new_list = input_list[:]
收件人:
new_list = [sublst[:] for sublst in input_list]
,并确保使用return new_list
而不是input_list
。该列表理解只是手动将list
的 second 层的浅表副本复制到全新的list
中。您可以将其进一步扩展到更高级别的嵌套,但是随着您的深入,它会变得越来越荒谬。
真正的答案是让Python用copy.deepcopy
为您完成工作,使其成为:
new_list = copy.deepcopy(input_list)
无论您的数据结构有多深嵌套,它都将起作用。
,
这应该有效,如果您需要内联,请告诉我,我会更新答案,根据您的问题我不确定:
input_list = [[1,2,3,4,5,6,7,8,9,0],[3,[1,5]]
remove_list = [1,0]
def eliminate(input_list,remove_list):
new_list=[]
for item in input_list:
new_list.append(list(set(item) - set(remove_list)))
return new_list
new_list = eliminate(input_list,remove_list)
new_list
[[2,9],[9,5],[2,5]]
本文链接:https://www.f2er.com/3120329.html