如何检查iterable中只有一个值是否解析为True?

sco*_*awg 3 python expression list

是否有一种优雅,可读的方式来检查迭代中的所有元素是否it解析True(您可以假设所有值都是布尔值,尽管这与我的问题无关)?我提出了:

any(it) and not reduce(lambda x, y: x and y, it)

但是我认为减少使得理解有点混乱加上我觉得它不起作用:

In [1]: a=[True, True, False]

In [7]: any(a) and not reduce(lambda x, y: x and y, a)
Out[7]: True
Run Code Online (Sandbox Code Playgroud)

有更可读的方法吗?

更新:我在上面的表达式中意识到错误.reduce()需要在看到True时停止,而不是继续.

roi*_*ppi 7

你的标题不同意你的问题,但我会回答标题.

你可以使用sum布尔值.检查它是否等于1(或你想要的任何值):

>>> a = [True, True, False]
>>> sum(a)
2
>>> b = ['hey', '', 'a string']
>>> sum(map(bool,b))
2
Run Code Online (Sandbox Code Playgroud)


ssh*_*124 5

你可以使用count:

>>> a=[True, True, False]
>>> if a.count(True) == 1:
...     print 'Hello'
... else:
...     print 'Sorry'
Sorry
Run Code Online (Sandbox Code Playgroud)

例子

>>> [True, False].count(True) == 1
True

>>> [True, True, False].count(True) == 1
False

>>> [True, True, False].count(False) == 1
True
Run Code Online (Sandbox Code Playgroud)