我试图保留与python标准函数append / extend等一起使用的过去列表组合的日志:
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)
netlist = log[0]
index = netlist.index((11, 24))
tmp = netlist[index - 1]
netlist[index - 1] = netlist[index]
netlist[index] = tmp
print(netlist)
log.append(netlist)
print()
for lists in log:
print(lists)
结果应该是一个包含切换后所有使用列表的日志变量。因此,在日志中使用de list进行监视,并且在每次切换之后,它应该在循环结束时将列表附加到日志中,我应该打印所有使用的列表。
我得到的结果是一个包含所有相同列表的日志(最后一个使用的列表)。
第一个清单是我现在应该如何现在。
答案 0 :(得分:1)
我会尝试清除一些误解。
我得到的结果是一个包含所有相同列表的日志(最后一个使用的列表)。
使用以下代码交换列表中的值时 -
tmp = netlist[index - 1]
netlist[index - 1] = netlist[index]
netlist[index] = tmp
您没有创建新列表,只是修改了相同的列表。
了解列表和可变性here。
问题,如下所示 -
您的日志列表最终会包含对相同 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。
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)]