gpt4 book ai didi

python - 从 for 循环中的列表访问生成器对象时的意外行为

转载 作者:行者123 更新时间:2023-11-28 18:36:04 25 4
gpt4 key购买 nike

我有以下代码:

l = [(i for j in xrange(2)) for i in xrange(3)]

print list(l[0])

for i in l:
print list(i)

以及以下输出:

[2, 2]

[]

[<generator object <genexpr> at 0x022B97B0>, <generator object <genexpr> at 0x022B97B0>]

[<generator object <genexpr> at 0x022B9D00>, <generator object <genexpr> at 0x022B9D00>]

前两行是预期结果,但最后两行结果对我来说看起来很奇怪。我想通过索引 l[0] 访问或通过迭代器循环访问列表的每个元素之间没有区别。你能帮帮我吗?

最佳答案

此问题是由变量名冲突引起的。列表理解使用的变量共享全局命名空间,而不是在 python 2.x 中使用孤立的命名空间。因此,将您的变量名从 i 更改为不同的名称会给您正确的结果。

l = [(i for j in xrange(2)) for i in xrange(3)]

print list(l[0])

# Change variable name to `value`
for value in l:
print list(value)

这将打印:

[2, 2]
[]
[2, 2]
[2, 2]

为了进一步证明这一点,您可以这样做:

l = [(i for j in xrange(2)) for i in xrange(3)]

print list(l[0])

i = 'another value'

for value in l:
print list(value)

这会给你:

[2, 2]
[]
['another value', 'another value']
['another value', 'another value']

关于python - 从 for 循环中的列表访问生成器对象时的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32420962/

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