【问题标题】:dummy numbers generator in PythonPython中的虚拟数字生成器
【发布时间】:2021-08-10 21:25:59
【问题描述】:

an = (an-2 + 1)×an-1a0 = 0a1 = 1 公式查找dummy_numbers(max)

我的代码:

def dummy_numbers(nums):
    binsize = (((nums - 2) +1) * (nums -1))
    return map(lambda x: int(nums + binsize * x), range(nums))

for num in dummy_numbers(10):
    print(num)

我的代码打印的结果与我预期的不同

【问题讨论】:

  • 你的问题是....?
  • 我的结果不同,例如:10 91 172 253 334 415 496 577 658 739

标签: python python-3.x generator dummy-data


【解决方案1】:

使用带有yield 的实际生成器来简化此操作。这里棘手的部分是在迭代时跟踪an-1an-2。可以这样实现:

second_last, last = None, None
for current in range(10):
    second_last, last = last, current
assert (second_last, last) == (8, 9)

您还需要硬编码为 01 返回的常量值:

def dummy_numbers(an):
    if an == 0:
        yield 0
    elif an == 1:
        yield 0
        yield 1
    else:
        an_2, an_1 = None, None
        for an_0 in dummy_numbers(an - 1):
            an_2, an_1 = an_1, an_0
            yield an_0
        yield (an_2 + 1) * an_1


for num in dummy_numbers(10):
    print(num)

输出:

0
1
1
2
4
12
60
780
47580
37159980
1768109008380

你也可以像这样使这个非递归:

def dummy_numbers(an):
    an_2, an_1 = None, None
    for i in range(an):
        if i == 0:
            an_0 = 0
        elif i == 1:
            an_0 = 1
        else:
            an_0 = (an_2 + 1) * an_1

        yield an_0
        an_2, an_1 = an_1, an_0

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 2016-05-15
    • 2018-02-18
    • 2013-01-12
    • 2012-02-16
    • 2011-06-03
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多