【问题标题】:How do I create an infinite loop of binary digits?如何创建二进制数字的无限循环?
【发布时间】:2021-01-06 21:05:05
【问题描述】:

例如: 0 10 11 100 101 110 111

等等。

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

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

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

【问题讨论】:

  • 由于您需要无限项,您不能将它们存储在列表中。你需要你的程序无限地打印二进制数吗?
  • 使用生成器函数。
  • while True: digit = random.choice([0,1])

标签: python list loops binary


【解决方案1】:

你可以创建一个生成器:

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.<b>count</b>(<i>start=0</i>, <i>step=1</i>) 作为基础生成器:

from itertools import count

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

【讨论】:

  • 更简单地说,itertools.count 已经提供了所需的基本生成器。 infinite_binary_gen = (str(bin(x))[2:] for x in count()).
【解决方案2】:

使用这样的循环而不是列表推导:

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:]))

【讨论】:

    【解决方案3】:

    我只会使用一个while循环。这样,你可以用 4 行代码来完成。试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      相关资源
      最近更新 更多