gpt4 book ai didi

python - 你能分解这个 pythonic 列表理解吗

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:54 25 4
gpt4 key购买 nike

我在寻找解决最长递增子序列问题的有趣方法时遇到了这个列表理解:

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()

最佳答案

您在 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)

关于python - 你能分解这个 pythonic 列表理解吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48735586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com