列表中每个元素都是True布尔值
我知道
all(map(compare,new_subjects.values()))==True
这段代码可以告诉我列表中的每个元素是否都为真。但是,我该怎么判断除了其中一个元素之外,其他所有元素是否都为真呢?
4 个回答
4
计算有多少个不是“真”的:
values = (compare(val) for val in new_subjects.itervalues())
if sum(1 for x in values if not x) == 1: # just one
...
7
如果你是想问的是实际的 True
而不是计算结果为 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
12
values = map(compare, new_subjects.values())
len([x for x in values if x]) == len(values) - 1
基本上,你就是从列表中筛选出那些为真的值,然后把这个筛选出来的列表的长度和原来的列表长度进行比较,看看是不是少了一个。