【问题标题】:Check what numbers in a list are divisible by certain numbers?检查列表中的哪些数字可以被某些数字整除?
【发布时间】:2015-07-20 13:30:50
【问题描述】:

编写一个接收数字列表的函数 和一个术语列表,只返回可整除的元素 根据所有这些条款。您必须使用两个嵌套列表推导来解决它。

divisible_numbers([12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1], [2, 3]) # 返回 [12, 6]

def divisible_numbers(a_list, a_list_of_terms):

到目前为止,我有一个模糊的伪代码,它由检查列表组成,检查是否可整除是否附加到新列表,检查新列表检查是否可被下一个术语整除并重复,直到你完成了所有术语,我不希望任何人为我这样做,但也许是正确方向的提示?

【问题讨论】:

标签: python math for-loop list-comprehension


【解决方案1】:

内部表达式应检查特定数字是否可以被第二个列表中的所有项整除

all(i%j==0 for j in a_list_of_terms)

然后是一个外部列表推导来遍历第一个列表的项目

[i for i in a_list if all(i%j==0 for j in a_list_of_terms)]

大家一起

def divisible_numbers(a_list, a_list_of_terms):
    return [i for i in a_list if all(i%j==0 for j in a_list_of_terms)]

测试

>>> divisible_numbers([12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1], [2, 3])
[12, 6]

【讨论】:

  • 这里的所有功能都很好用。
  • 如果列表很大,您可能需要考虑首先通过检查术语没有共同因素来优化您的输入。这样你就不会做不必要的检查。例如,当任何能被 6 整除的东西都可以被 2 和 3 整除时,将 6 作为 [2,3,6] 中的项处理是没有意义的。
  • 很好地使用了“all”。如果你把 any 放在适当的位置,这是一个比较 all 和 any 的有趣案例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 2019-12-27
  • 2012-12-28
  • 2019-07-04
相关资源
最近更新 更多