Python:根据条件划分列表的元素

标签 python algorithm control-flow

我试图找出前 20 个自然数的最小公倍数(欧拉计划问题 5)。为此,我的算法是:

  1. 列表中有数字 1 到 20
  2. 仅除列表中可被 i 整除的元素,其中 i 在范围 (2-20) 内。
  3. 无论列表中剩下什么数字,将它们相乘就是 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 中还有其他问题有简单的答案,例如:

find least common multiple of numbers 1-20

关于Python:根据条件划分列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853387/

相关文章:

python - 从文件中读取字符串的特定部分

c++ - 如何使用 C++ STL 算法重写嵌套循环?

algorithm - 用于编写算法的 LaTeX 包

java - 在 switch 语句中将 Break 标记为默认情况,行为不符合逻辑

node.js - 是否有任何好的模式可以根据 Node 中的事件序列来控制流程?

c++ - 是否从 C++ 中的 for 循环不良做法返回函数值?

python - 并排绘制两个 pandas 数据框,每个都采用子图样式

python - 当我尝试运行 "import matplotlib.pyplot as plt"时,收到以下错误 : "ModuleNotFoundError: No module named ' PIL'"

python ( Pandas ): store a data frame in hdf5 with a multi index

algorithm - 链表循环检测算法