gpt4 book ai didi

python - 列表理解和一行 for 循环

转载 作者:行者123 更新时间:2023-11-28 21:44:16 25 4
gpt4 key购买 nike

如果你做这个列表理解:

squares = [x**2 for x in range(100000)]

它会占用大量内存,所以你可以使用生成器做同样的事情:

squares = (x**2 for x in range(100000))

现在假设我想使用单行 for 循环来打印所有这些方 block :

[print(square) for square in squares]

我的问题是:以这种方式打印是否创建了一个列表(它看起来像一个列表理解)?如果是这样,该列表是否存储在内存中? (如果是这样,在创建 squares 时使用生成器就没有意义了,因为它们无论如何都会存储在另一个列表中。)还有一件事:如果你这样做:

[1, 2, 3, 4, 5, 6]

如果不将其分配给任何变量,这些值会存储在内存中吗?

最佳答案

如果不给它分配一个名字,列表不会被存储在内存中,因为没有引用保存它(最初。内存被分配给它,但它是立即释放,因为 (C)Python 可以看到您没有使用它*)。

除此之外,打印:

[print(square) for square in squares]

效率极低;您正在使用列表理解只是为了打印的副作用,一个包含print函数调用的结果的列表(它的返回值)被填充。

这意味着您最终会得到一个 None 的列表,只是为了转储 而创建的,没有太大用处。

您最好使用带有 for 循环的生成器,正如 @user312016 在他的回答中所建议的那样。生成器将按需生成,不会创建额外的列表。

*在交互模式下,情况有所不同,因为您将名称 _ 用作最近计算的表达式的名称。在那里,列表存储在内存中,直到下一个表达式覆盖附加到 _ 的值。

关于python - 列表理解和一行 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973081/

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