我想将列表(arrCopy
)附加到列表列表(结果)。但是对于每个append
,当前列表将替换前一个列表,因此列表列表仅具有当前列表。
def insertionSort1(n, arr):
arrCopy = arr[:]
last = arr[-1]
result = []
for ind, num in enumerate(reversed(arr[:-1])):
print('ind',ind, 'num',num, 'arrCopy', arrCopy, 'result',result)
if num>=last:
arrCopy[len(arr)-1-ind] = num
result.append(arrCopy)
else:
arrCopy[len(arr)-1-ind] = last
result.append(arrCopy)
break
print(result)
for nums in result:
print(' '.join(str(n) for n in nums))
insertionSort1(5, [2, 4, 6, 8, 3])
答案 0 :(得分:3)
arrCopy
附加为引用,表示指向内存中数组的指针。如果内存中的数组发生更改,它将在被引用的所有位置显示。
您需要存储阵列的副本。您可以这样做:
result.append(arrCopy[:])
这将在内存中创建一个不受arrCopy
更改影响的新数组
答案 1 :(得分:1)
追加时您不会“冻结” arrCopy,因此每次按名称添加列表时,列表都会随着结果的变化而变化。
尝试导入复制模块并像我一样使用Deepcopy。
import copy
def insertionSort1(n, arr):
arrCopy = copy.deepcopy(arr[:])
last = arr[-1]
result = []
for ind, num in enumerate(reversed(arr[:-1])):
print('ind',ind, 'num',num, 'arrCopy', arrCopy, 'result',result)
if num>=last:
arrCopy[len(arr)-1-ind]=num
result.append(copy.deepcopy(arrCopy))
else:
arrCopy[len(arr)-1-ind]=last
result.append(copy.deepcopy(arrCopy))
break
print(result)
for nums in result:
print(' '.join(str(n) for n in nums))
def main():
insertionSort1(5, [2, 4, 6, 8, 3])
if __name__ == '__main__':
main()