python - 为冰雹序列创建生成器表达式
问题描述
创建了以下生成器函数:
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 作为第一个数字传递。我注意到使用范围可能不是正确的路径,但我需要一个停止条件。
我想弄清楚的主要事情:
- 如何将 next() 输出传递回生成器以生成序列?
- 如何提供停止条件?
对执行此任务有任何帮助吗?
解决方案
使用递归的冰雹序列的生成器表达式
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)