前些天写python题目的时候,发现一个应该算是我之前忽略一个知识点,在网络上查阅不到较为详细的内容,我想应该属于映射方面的知识点。
于是我自己总结了一下这个小经验,也可以供大家参考一下。
当我定义了一个函数以后,我往函数内部传递了一个列表,并对列表进行处理,处理完后,我想返回一个列表,依次保存我每次列表处理时的变化,也方便我检查我的代码,代码如下:
def arrange(list1):
result = []
for i in range(1,len(list1)):
temp = list1[i]
pos = i
for k in range(i-1,-1,-1):
if temp < list1[k]:
list1[k+1] = list1[k]
pos = k
list1.pop(pos)
list1.insert(pos,temp)
result.append(list1)
return result
当我去调用这个函数时:
result = arrange([5,4,3,2,1])
print(result)
我发现输出的结果如下:
[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
它并没有把我每次做的处理后的列表记录下来,而是直接记录了最终值。
我预期的结果应该是:
[[4, 5, 3, 2, 1], [3, 4, 5, 2, 1], [2, 3, 4, 5, 1], [1, 2, 3, 4, 5]]
当我尝试了一下修改后发现了需要传递的是它的一个映射副本,不然在函数内传递这个列表,就会直接传递最终处理后的值,解决方法很简单,只需要在传递时传统它的副本就行,更改后的代码如下:
def arrange(list1):
result = []
for i in range(1,len(list1)):
temp = list1[i]
pos = i
for k in range(i-1,-1,-1):
if temp < list1[k]:
list1[k+1] = list1[k]
pos = k
list1.pop(pos)
list1.insert(pos,temp)
result.append(list1[:])
return result
result = arrange([5,4,3,2,1])
print(result)
输出结果:
[[4, 5, 3, 2, 1], [3, 4, 5, 2, 1], [2, 3, 4, 5, 1], [1, 2, 3, 4, 5]]
能够记录每一次处理后列表的变化,也就和我预期的一模一样了。