我会尝试澄清一些误解。
误解 1 - 列表是不可变的
我得到的结果是一个包含所有相同列表(最后一个使用)的日志。
正确理解 - 列表是可变的
当您使用以下代码交换列表中的值时 -
tmp = netlist[index - 1]
netlist[index - 1] = netlist[index]
netlist[index] = tmp
你不是在创建一个新列表,你只是在修改同一个列表。
阅读列表和可变性here。
问题如下 -
您的日志列表最终将包含 多个 对 same list 对象的引用。
所以情况会是这样的。
__________________________________________________
| netlist |
| |
| value - |
| [(3, 23), (5, 7), (6, 14), (3, 0), |
| (11, 24), (3, 5), (20, 19), (16, 9), (19, 5)] |
| |
| |
| |
|_____^________________^______________^____________|
______|________________|______________|_________________
| | | | |
| ___|_____ ____|_____ ____|_____ |
| | | | | | | |
| | 0 | | 1 | | 2 | |
| |_________| |__________| |__________| ........ |
| |
| log |
|________________________________________________________|
在这里,您可以看到0th 索引与1st 索引、2nd 索引等引用相同的元素。
您可能想要的是一个包含多个不同列表的 log。
有点像 -
_____________ ____________ _____________
| | | | | |
| [(3, 23), | | another | | yet another |
| (5, 7)...]| | list | | list |
| | | | | |
| | | | | |
|_____^_______| |____^_______| |____^________| .......
______|________________|________________|_______________
| | | | |
| ___|_____ ____|_____ ____|_____ |
| | | | | | | |
| | 0 | | 1 | | 2 | |
| |_________| |__________| |__________| ....... |
| |
| log |
|________________________________________________________|
因此,当您尝试打印日志时,您得到的是一次又一次打印的相同列表。
解决方案是使用: 运算符复制初始列表。
阅读如何复制列表here。
误解 2 - 使用0 选择最后一个元素。
正确理解 - 使用-1 获取最后一个元素。
这段代码——
netlist = log[0]
建议您尝试选择列表的最后一个元素,但使用索引0。
要获取列表中的最后一个元素,请使用索引-1。
了解切片符号here。
最终代码 -
log = [[(3, 23), (5, 7), (6, 14), (3, 0), (11, 24), (3, 5), (20, 19), (16, 9), (19, 5)]]
counter = 0
switch = False
while switch == False:
counter += 1
if counter > 5:
switch = True
# lenth = len(log) Commenting this line as it's not needed
netlist = log[-1][:]
index = netlist.index((11, 24))
tmp = netlist[index - 1]
netlist[index - 1] = netlist[index]
netlist[index] = tmp
# print(netlist)
log.append(netlist)
# Remove 1st element of log if you don't need it.
log = log[1:]
print()
for lists in log:
print(lists)
这会打印出您所期望的以下输出。
[(3, 23), (5, 7), (6, 14), (11, 24), (3, 0), (3, 5), (20, 19), (16, 9), (19, 5)]
[(3, 23), (5, 7), (11, 24), (6, 14), (3, 0), (3, 5), (20, 19), (16, 9), (19, 5)]
[(3, 23), (11, 24), (5, 7), (6, 14), (3, 0), (3, 5), (20, 19), (16, 9), (19, 5)]
[(11, 24), (3, 23), (5, 7), (6, 14), (3, 0), (3, 5), (20, 19), (16, 9), (19, 5)]
[(19, 5), (3, 23), (5, 7), (6, 14), (3, 0), (3, 5), (20, 19), (16, 9), (11, 24)]
[(19, 5), (3, 23), (5, 7), (6, 14), (3, 0), (3, 5), (20, 19), (11, 24), (16, 9)]