gpt4 book ai didi

Python应用动态列表理解(列表追加)

转载 作者:行者123 更新时间:2023-11-28 18:35:56 24 4
gpt4 key购买 nike

vals= [1]
for j in xrange(i):
vals.append([k for k in f(vals[j])])

此循环通过循环将值附加到自身。如果我将其压缩为列表推导式,它就不起作用,因为它不会在每次迭代时使用自身“动态地”扩展 vals——它会按照最初构建的方式处理 vals。

有没有一种方法可以像这样动态追加单行列表理解?根据我的研究,看起来我可能正在寻找 reduce 功能? (相当于一折)

最佳答案

您确实可以为此使用 reduce,将初始列表用作第三个参数。

>>> def f(lst):
... return [x+1 for x in lst] + [len(lst)]
>>> reduce(lambda lst, i: lst + [f(lst[i])], range(5), [[1]])
[[1], [2, 1], [3, 2, 2], [4, 3, 3, 3], [5, 4, 4, 4, 4], [6, 5, 5, 5, 5, 5]]

(请注意,初始列表可能应该是 [[1]],而不是 [1],否则您正在将数字传递给 f 在第一次迭代中,但在所有后续迭代中都是列表。)

另请注意,关于性能,您的原始循环可能会快一点,因为 reduce 基本上必须在每次迭代中创建两个新列表,而您只需附加到一个列表。就个人而言,我会使用循环的变体,删除(可能无用的)内部列表理解并使用 [-1] 来明确您始终使用以前的结果。

vals = [[1]]
for _ in xrange(n):
vals.append(f(vals[-1]))

关于Python应用动态列表理解(列表追加),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32505589/

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