gpt4 book ai didi

python - 在列表理解期间使用附加更改列表

转载 作者:太空狗 更新时间:2023-10-30 00:36:15 24 4
gpt4 key购买 nike

警告:这是一个直截了当的代码高尔夫问题,所以我知道我要问的是生产中的不良做法

我试图在列表理解期间更改数组,但由于某种原因它挂起,我不知道为什么或如何解决这个问题。

我正在处理不确定深度的列表列表,需要将它们压缩成一个平面列表 - for those curious its this question .但在这个阶段,假设我需要列表中所有元素的平面列表,如果是列表则为 0。

通常的方法是遍历列表,如果它是一个列表,则将其添加到末尾,如下所示:

for o in x:
if type(o)==type([]):x+=o
else:i+=o
print i

我正在尝试使用列表理解来缩短它,就像这样。

print sum([
[o,x.append(o) or 0][type(o)==type([])]
for o in x
]))

现在,我知道 List.append 返回 None,所以为了确保我得到一个数值,惰性计算说我可以做 x.append(o) 或 0,并且由于 None 是“假的”,它将评估第二部分并且值为 0

但事实并非如此。如果我将 x.append() 放入 x 的列表理解中,它不会中断或出错,也不会返回迭代错误,它只会卡住。 为什么 append 在列表理解过程中卡住,但上面的 for 循环工作正常?

编辑:为了防止这个问题被删除,我不是在寻找打高尔夫球的技巧(尽管它们很有教育意义),我是在寻找一个关于为什么代码没有被删除的答案按照我写的方式工作。

最佳答案

or 可能是惰性的,但列表定义不是。对于x中的每个o,当[o,x.append(o) or 0][type(o)==type([])] monstrosity 被评估,Python 必须评估 [o,x.append(o) or 0],这意味着评估 x.append(o) or 0 ,这意味着 o 将附加到 x 而不管它是否是列表。因此,您最终将 x 的每个元素附加到 x,然后它们被一次又一次地附加,并且 OutOfMemoryError

关于python - 在列表理解期间使用附加更改列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20508159/

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