下面是一个循环,用于查找数字1-20的最小公倍数:
count=0
while not all(count % 1 == 0, count % 2 == 0,
count % 3 == 0, count % 4 == 0,
... count % 20 ==0):
count+=1
print count
输入这么多条件是相当繁琐的。这需要改进,特别是如果数字大于20.但是,对于python的新手,我的下意识反应是:
while not all(count % range(1,21)==0):
...这是行不通的,因为python无法读懂思想。我已经考虑过将一个列表放在all()中,但是我不知道如何生成一个包含变量的列表。
是否有输入像这样的条件模式的简写,还是有一种更聪明的方法可以做到这一点,我错过了?
答案 0 :(得分:3)
生成器表达式:
while not all(count % i == 0 for i in range(1,21)):
顺便提一下,如果将数字1..20分解为素数因子,这很容易手工解决。它大约有2亿,所以循环可能需要一段时间。
答案 1 :(得分:2)
while not all(count % x == 0 for x in range(1,21)):
你也可以在这里使用any
:
while any(count % x for x in range(1,21)):
因为0
在Python中评估为False
。
答案 2 :(得分:1)
your current problem的更好解决方案是使用最不常见的多重函数的有用属性(假设您正确实现了它):
lcm(a, b, c) == lcm(lcm(a, b), c)
它运行得非常快,即使对于相当大的输入(前20,000个数字的最小公倍数有8,676位):
>>> %timeit reduce(lcm, range(1, 20001))
1 loops, best of 3: 240 ms per loop