Python 标尺序列生成器

标签 python iterator generator

我长期以来一直在努力弄清楚如何在Python中定义标尺序列的生成器函数,该函数遵循序列的第一个数字(从1开始)出现一次的规则,接下来的两个数字出现一次将出现两次,接下来的三个数字将出现三次,依此类推

所以我想要得到的是 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7 等等。

据我了解,执行此操作的方法是使用两个单独的计数生成器 (itertools.count(1)),然后对于一个生成器中的每个数字,从另一个生成器生成数字:

def rul():
    num = itertools.count(1) 
    repeator = itertools.count(1)
    for x in range(next(repeator)):
        yield from num

但是如果我在这个函数上点击 next(),我只会返回常规的 1,2,3,4.. 序列...

对此的任何帮助将不胜感激。

最佳答案

不带 itertools 的普通旧 Python 怎么样?

def ruler():
    counter = 1
    n = 1
    while True:
        for i in range(counter):
            for j in range(counter):
                yield n
            n += 1
        counter += 1

以我的拙见,这是针对此类情况的最清晰、最直接的解决方案

关于Python 标尺序列生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70897759/

相关文章:

python - 为 raven-python( Sentry 客户端)添加一个钩子(Hook)到 Gunicorn

java - 如何将迭代器中的值传递给paintComponent

java - Set.contains() 如何决定它是否是一个子集?

c - Yacc问题: Make Data available in next Non Terminal

ruby-on-rails-3 - 现有模型和 DB 表的 rails g 脚手架

python - 使用 Twisted 进行基本 HTTP 解析

python - "len() of unsized object"错误

python - 子进程 check_output OSError : [Errno 2] No such file or directory

c++ - ostream_iterator的声明

python - Python中的产量中断