给定一个列表,我想检查该列表中的所有元素是否可以被某个给定的整数整除。基于此,我必须返回一个布尔值。
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
方式。
答案 0 :(得分:7)
首先,你想要模数除法(%
),因为你想看看它是否均匀地除以5
,所以你要检查余数,而不是除法的结果。
您可以使用the all()
builtin(在锡上执行的操作),但you don't need to generate a list, instead use a generator expression:
all(x%5 == 0 for x in l)
这有一个懒惰的优点,所以一旦值不可分,它就会返回,从而节省计算
答案 1 :(得分:4)
使用列表推导是pythonic。你需要使用mod not div。
使用内置的all
res = all([x%5==0 for x in l])
您可以通过
更有效地完成此操作res = all(x%5 == 0 for x in l)
使用生成器表达式。在第一种情况下,python生成所有mod值的列表,在第二种情况下,值生成为all
所需的值,因此只生成第一个不可分割的值。