我试图找出前 20 个自然数的最小公倍数(欧拉计划问题 5)。为此,我的算法是:
- 列表中有数字 1 到 20
- 仅除列表中可被 i 整除的元素,其中 i 在范围 (2-20) 内。
- 无论列表中剩下什么数字,将它们相乘就是 lcm。
这是我们第一次在学校实际用于计算 lcm 的最朴素的算法。
现在,我不知道如何根据条件划分列表的元素。 我试过:
a=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
for x in a:
if(x%2==0):
x=x/2
这似乎行不通。 我也试过:
a=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
a1=[if(x%2==0): x/2 for x in a]
上面的 if 条件后有和没有“:”。这是行不通的。我有以下问题:
一个。为什么第一个循环不能正常工作?
谁能告诉我该怎么做?
我的算法能正常工作吗?
最佳答案
a. Why isn't the first loop working correctly?
出于同样的原因:
Foreach in Python not working as expected
b. Can someone tell me how I can do this?
您可以执行以下任一操作:
a=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
for i, x in enumerate(a):
if x%2==0:
a[i]=x/2
或者:
a=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
a1=[x/2 if x%2==0 else x for x in a]
c. Will my algorithm work correctly?
我不这么认为。你最终会把每个人除以自己,结果总是 1。
但是 SO 中还有其他问题有简单的答案,例如:
关于Python:根据条件划分列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853387/