在寻找有趣的方法来解决最长时间增长的子序列问题时,我遇到了这种列表理解:
def lis(a):
L = []
for (k,v) in enumerate(a):
L.append(max([L[i] for (i,n) in enumerate(a[:k]) if n<v] or [[]], key=len) + [v])
return max(L, key=len)
我试图理解它,但这是我理解它的最佳方式:
def lis(a):
L = []
for (k,v) in enumerate(a):
for (i,n) in enumerate(a[:k]):
if n < v:
L.append(max(L[i]) + [v])
else:
L.append([[]])
#L.append(max([L[i] for (i,n) in enumerate(a[:k]) if n<v] or [[]], key=len) + [v])
return max(L, key=len)
但这是不正确的......任何帮助?谢谢。
编辑:
新代码:
def lis(a):
L = []
for (k,v) in enumerate(a):
for (i,n) in enumerate(a[:k]):
if n < v:
L.append(max(L[i], key=len) + [v])
else:
L.append([[]] + [v])
当我在此列表中运行时:
a = [5, 2, 1, 5, 3, 2, 10, 2, 4, 2, 1, 0, 5]
我收到此错误:
L.append(max(L[i], key=len) + [v])
TypeError: object of type 'int' has no len()
答案 0 :(得分:2)
你在else语句中忘记了+ [v]
。
编辑(认为它是对的):
def lis(a):
L = []
for (k, v) in enumerate(a):
tmp = []
for (i, n) in enumerate(a[:k]):
if n < v:
tmp.append(L[i])
if len(tmp) == 0:
tmp = [[]]
L.append(max(tmp, key=len) + [v])
return max(L, key=len)