列表的每个元素都是True布尔值

时间:2011-04-16 01:32:33

标签: python

我知道

all(map(compare,new_subjects.values()))==True

会告诉我列表中的每个元素是否为True。但是,如何判断除其中一个元素之外的每个元素是否为True?

4 个答案:

答案 0 :(得分:11)

values = map(compare, new_subjects.values())
len([x for x in values if x]) == len(values) - 1

基本上,您过滤列表中的真值,并将该列表的长度与原始列表进行比较,以查看它是否少一个。

答案 1 :(得分:7)

如果你的意思是实际True而不是评估为真,你可以算一下吗?

>>> L1 = [True]*5
>>> L1
[True, True, True, True, True]
>>> L2 = [True]*5 + [False]*2
>>> L2
[True, True, True, True, True, False, False]
>>> L1.count(False)
0
>>> L2.count(False)
2
>>> 

只检查一个False:

>>> def there_can_be_only_one(L):
...     return L.count(False) == 1
... 
>>> there_can_be_only_one(L1)
False
>>> there_can_be_only_one(L2)
False
>>> L3 = [ True, True, False ]
>>> there_can_be_only_one(L3)
True
>>> 

编辑:这实际上更好地回答了您的问题:

>>> def there_must_be_only_one(L):
...     return L.count(True) == len(L)-1
... 
>>> there_must_be_only_one(L3)
True
>>> there_must_be_only_one(L2)
False
>>> there_must_be_only_one(L1)
False

答案 2 :(得分:3)

计算有多少不是真的:

values = (compare(val) for val in new_subjects.itervalues())
if sum(1 for x in values if not x) == 1: # just one
    ...

答案 3 :(得分:0)

假设compare函数返回一个布尔值,并且在整数上下文中知道True / False变为1/0,您可以这样做:

values = new_subjects.values()
sum(compare(v) for v in values) == len(values) -1