gpt4 book ai didi

python - 生成器表达式使二进制字符串生成器永远卡住

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

我编写了一个函数来从给定列表 s 开始生成二进制字符串(所有以 s 项之一结尾的二进制字符串):

def binary_strings(s):
yield from s
while True:
s = [b + x for x in s for b in "01"]
yield from s

它的工作原理正如您从输出中看到的那样:

>>> for i in binary_strings(["10", "01"]): print(i)

10
01
010
110
001
101
0010
1010
0110
1110
0001
1001
0101
1101
00010
10010
01010
11010
00110
10110
01110
11110
00001
10001
01001
11001
00101
10101
01101
11101
000010
100010
... # Output is infinite so I must truncate it.

现在我修改 s 并为其使用生成器表达式而不是列表:

def binary_strings(s):
yield from s
while True:
s = (b + x for x in s for b in "01")
yield from s

现在执行在用尽 3 种长度的可能性后突然停止:

>>> for i in binary_strings(["10","01"]): print(i)

10
01
010
110
001
101
# Output is not truncated, the function freezes at this points
# and yield no more output

我希望第二个版本能像第一个版本一样工作,因为我从不在 s 上使用列表方法,我只是遍历它,为什么第二个版本不能工作?

最佳答案

我找到了答案,yield from s 行耗尽了生成器,因此 yield from s 行从一个空生成器中生成(之前的理解生成为空 s 是空的)因此永远卡住。

列表可以任意迭代多次,所以不会出现这个问题。

这个问题只有在迭代之后才会出现,因为开始时 s 是一个列表,然后变成了一个生成器。

关于python - 生成器表达式使二进制字符串生成器永远卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39134067/

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