1

给定一个列表,我想检查该列表中的所有元素是否可以被某个给定整数整除。基于此,我必须返回一个布尔值。

l=[10,30,40,20]

例如 - 这个列表的所有元素都可以被 5 整除。然后,我会返回True. 6,我会回来False的。

我能想到的一种方法是生成一个由布尔值组成的数组,然后AND是它们。

blist=[x%5==0 for x in l]
# [False, False, False, False]
# AND THE ELEMENTS

但是这种方法感觉很糟糕。任何人都可以提出一个更简单pythonic的方法来解决这个问题。

4

2 回答 2

7

首先,您需要模除法 ( %),因为您想查看它是否均匀地除以5,因此您检查的是余数,而不是除法的结果。

您可以使用内置函数(它按照all()它在锡上所说的那样做),但您不需要生成列表,而是使用生成器表达式

all(x%5 == 0 for x in l)

这具有懒惰的优点,因此只要一个值不可整除,它就会返回,从而节省计算量

于 2012-12-07T15:32:03.493 回答
4

使用列表推导是 Pythonic。你需要使用 mod 而不是 div。

使用all内置

res = all([x%5==0 for x in l])

您可以通过以下方式更有效地做到这一点

res = all(x%5 == 0 for x in l)

它使用生成器表达式。在第一种情况下,python 生成所有 mod 值的列表,在第二种情况下,值是根据需要生成的all,因此只生成第一个不可分割的值。

于 2012-12-07T15:30:33.003 回答