首页 > 解决方案 > 为冰雹序列创建生成器表达式

问题描述

创建了以下生成器函数:

def hailstone(n):
    yield n
    while n > 1:
        n = n // 2 if n % 2 == 0 else n * 3 + 1
        yield n

作为冰雹序列的生成器函数对我有用,现在我试图生成相同的输出,但来自生成器表达式(单行)。

我试图在这个方向上生产它:

hailstone = (num // 2 if num % 2 == 0 else num * 3 + 1 for i in range("something here"))

其中 num 作为第一个数字传递。我注意到使用范围可能不是正确的路径,但我需要一个停止条件。

我想弄清楚的主要事情:

  1. 如何将 next() 输出传递回生成器以生成序列?
  2. 如何提供停止条件?

对执行此任务有任何帮助吗?

标签: pythongeneratorlist-comprehension

解决方案


使用递归的冰雹序列的生成器表达式

def hailstone_sequence(input_num):
    return [input_num] if input_num == 1 else ([input_num] + hailstone_sequence(input_num // 2) if input_num % 2 == 0 else [input_num] + hailstone_sequence(3 * input_num + 1))


for i in hailstone_sequence(11):
    print(i)

推荐阅读