我实现了最长上升子序列(LIS)算法,但结果完全混乱。
def lis():
#D = map(int, raw_input().split())
D = [3, 2, 6, 4, 5, 1]
L = [[] for i in range(len(D))]
L[0].append(D[0])
for i in range(len(D)):
for j in range(0,i):
if D[i] > D[j]:
L[i] = L[j]
L[i].append(D[i])
print L
返回结果:
[[3], [2, 6, 4, 5], [2, 6, 4, 5], [2, 6, 4, 5], [2, 6, 4, 5], [1]]
应该是什么:
[[3], [2], [2, 6], [2, 4], [2, 4, 5], [1]]
当我在调试器中看到以下代码时:
L[i] = L[j]
不仅L[i]
获得新值,而且main (L)
列表上的其他列表也是如此...
我不知道如何避免这种情况。看起来Python中的列表与C系列向量语言完全不同...
我已经为此奋斗了很长时间。给那位找出问题的人一大杯啤酒:(
copy
。 - Willem Van Onsem