假设我们正在检查list
中是否有任何奇数。最直接的方法是:
def has_odd(L):
for v in L:
if v % 2 == 1:
return True
return False
has_odd
功能检查list
中是否有任何奇数,一旦找到奇数,它将返回True
。但这似乎有点冗长。使用reduce
的一种更简洁的方式如下:
reduce(lambda res, v: res or bool(v), L, False)
,但这将遍及所有元素,是不必要的,因为一旦找到奇数,结果肯定是True
。
那么,还有其他方法可以做吗?
您可以使用any()
函数来减少冗长:
>>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> any(n % 2 == 1 for n in l)
True
>>>
注意,any()
与您最初刚刚概括几乎相同,因此不要指望提高速度:
def any(iterable):
for element in iterable:
if element:
return True
return False
首先,让我们写出小的指示器函数,以称为
def is_odd(number):
return number % 2
然后,我们可以使用imap
/map
any
编写"至少有一个奇数"的指标python 2。*
from itertools import imap def has_odd_number(iterable): return any(imap(is_odd, iterable))
python 3。*
def has_odd_number(iterable): return any(map(is_odd, iterable))
或发电机表达式
def has_odd_number(iterable):
return any(is_odd(number) for number in iterable)
示例:
>>> has_odd_number([0])
False
>>> has_odd_number([1])
True
另一种方式。您可以使用not all()
>>> l = [2, 4, 5, 6, 7, 8, 9, 10]
>>> not all(n%2==1 for n in l)
True