如何创建二进制数字的无限循环



例如:01011100101110111

等等。

我想让它无限发展,但这可能是不可能的。我已经试过了:

lista = [1,2,3,4,5,6,7,8,9,10]
listres = [str(bin(x))[2:].zfill(4) for x in lista]
print(listres)

它是有效的,但它都是一条线,也不是无限的。

您可以创建一个生成器:

def infinite_binary():
x = 0
while True:
yield str(bin(x))[2:]
x += 1
infinite_binary_gen = infinite_binary()
while True:
print(next(infinite_binary_gen))

输出:

0
1
10
11
100
101
110
111
1000
1001
... and so on

如@chepner的评论中所述,您可以将itertools.count(start=0,step=1)用于基本生成器:

from itertools import count
infinite_binary_gen = (str(bin(x))[2:] for x in count())
while True:
print(next(infinite_binary_gen))

使用这样的循环而不是列表理解:

i = 0
while True:
# uncomment this line to break the infinite loop:
# if i > 10: break
print(str(bin(i))[2:])
i += 1

请注意,此处不需要zfill(4)

如果需要将结果强制转换为int,使用:print(int(str(bin(i))[2:]))

我只需要使用while循环。通过这种方式,您可以在4行代码中完成。试试这个:

count = 1
while True:
listres = str(bin(count))[2:].zfill(4)
print(listres)
count += 1

最新更新