【问题标题】:all() function; iterate through list inside if statement (python 3)all() 函数;遍历 if 语句中的列表(python 3)
【发布时间】:2015-04-22 14:13:01
【问题描述】:

所以我一直在尝试解决“Project Euler”问题,但遇到了其中一个问题。 我正在尝试遍历列表并检查给定数字是否可以被给定列表中的每个值均分。 我已经尝试了 all() 函数,认为它是最好的,但不是我得到一个值错误或什么都没有。 我用 all() 函数尝试了很多语法组合,但没有运气。

div_lst = [x for x in range(1, 21)]
num_list = [x for x in range(1, 1000000)]

for x in num_list:
    if all(x % y for y in div_lst):
        print(x)

我试过了

all((x % y == 0) for y in div_lst) 
all((x % y for y in div_lst) == 0) 

还有更多,只是似乎无法弄清楚。

【问题讨论】:

  • 与您的问题无关,但您可以将前两行减少到 div_lst = range(1, 21)... 无需遍历 range 并创建一个列表。 range 按原样创建一个列表。
  • 哇谢谢不知道,会节省我一些时间。
  • 附带问题,假设我想要一个只有偶数的列表,我必须使用 [x for x in range(1, 1000) if x % 3 == 0] 吗?或者只是创建任何包含范围内某些条件的列表?

标签: python python-3.x


【解决方案1】:

你的语法

all((x % y == 0) for y in div_lst) 

做你想做的;它检查x 是否可以被y 整除,对于div_lst 中的每个y。你没有得到任何打印出来的唯一原因是因为答案比 10**6 大得多,所以你没有尝试正确的x

相比之下,all(x % y for y in div_lst) 等价于 all((x % y != 0) for y in div_lst),这不是您想要的,而且由于所有整数都等于 0 mod 1 无论如何都没有解。

(提示:这不是解决这个问题的正确方法。阅读“最小公倍数”,以及如何计算它们。)

【讨论】:

  • 没错,Euler 项目的重点在于,通过蛮力解决问题需要的时间太长,或者内存太多。您必须考虑如何减少循环的数量,甚至完全替换它们。
猜你喜欢
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多