假设我们正在检查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
。
那么,有没有其他方法可以做到这一点?
答案 0 :(得分:6)
您可以使用>>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> any(n % 2 == 1 for n in l)
True
>>>
功能来减少详细程度:
def any(iterable):
for element in iterable:
if element:
return True
return False
但是请注意any()
is pretty much the same as you had originally just generalized,所以不要期望提高速度:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 24828 (om.bdmaker.rtmp)
[ 05-30 13:28:30.710 395: 395 W/ ]
debuggerd: handling request: pid=24828 uid=10073 gid=10073 tid=24828
答案 1 :(得分:1)
首先让我们为“奇怪”写小指标函数,如
composer require spatie/laravel-backup
使用map
编写“至少包含一个奇数”的指标
Python 2。*
def is_odd(number):
return number % 2
Python 3。*
from itertools import imap
def has_odd_number(iterable):
return any(imap(is_odd, iterable))
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)
答案 2 :(得分:0)
另一种方式。你可以使用not all()
>>> l = [2, 4, 5, 6, 7, 8, 9, 10]
>>> not all(n%2==1 for n in l)
True