【发布时间】:2022-06-15 14:27:01
【问题描述】:
有没有一种方法可以使用列表推导来验证 Collatz 猜想,而无需使用 while 语句或其他方法将 n 值附加到 ls 而无需在每个语句后添加 ls?
from random import choice
from time import sleep
n = choice([x for x in range(2, 99*99) if all(x%y != 0 for y in range(2, x))])
ls = []
ls.append(n)
while True:
if n % 2 == 0:
n = n // 2
ls.append(n)
elif n % 2 != 0:
n = (3 * n) + 1
ls.append(n)
if n == 1:
break
print(ls)
【问题讨论】:
-
while 循环有什么问题?
-
while 循环没有什么问题,但是对于较大的值,它似乎需要很长时间,而且对我个人而言,似乎有一种方法可以使这个循环更紧凑
-
列表推导不能替代迭代逻辑,您需要提前确定需要执行多少次迭代
-
This 可能包含一些有用的讨论。
-
没有办法清除破坏理解的方法(您可能可以定义一些自定义迭代器,但它会很丑陋和令人困惑)