Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表的每个元素都是真布尔值_Python - Fatal编程技术网

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

Python 列表的每个元素都是真布尔值,python,Python,我知道 all(map(compare,new_subjects.values()))==True 会告诉我列表中的每个元素是否都是真的。但是,我如何判断除了其中一个元素之外的每个元素是否都是真的 values = map(compare, new_subjects.values()) len([x for x in values if x]) == len(values) - 1 基本上,您可以过滤列表中的真值,并将该列表的长度与原始列表的长度进行比较,以查看是否少一个值。计算有多少个值不

我知道

all(map(compare,new_subjects.values()))==True
会告诉我列表中的每个元素是否都是真的。但是,我如何判断除了其中一个元素之外的每个元素是否都是真的

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

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

计算有多少个值不为真:

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

如果您的意思是实际上是
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
>>> 
仅检查一个错误:

>>> 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

假设compare函数返回布尔值,并且知道在整数上下文中True/False变为1/0,则可以执行以下操作:

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

我对python不是很了解,但是为什么不能扫描列表并计算有多少元素是真的,如果只找到一个,那么答案是“是”,否则是“否”。这些函数通常是您在学习编程基础知识的前2-3个月编写的。即使我不懂Python,我也很确定没有“除了其中一个元素以外的所有元素是否都是真的”自动逻辑函数…@Giacomo没有函数,但它是一个单行程序。这确实是一种强大的语言,但这种神奇的魔力让东西不那么可读。乍一看,代码几乎没有说明它实际上做了什么。对于这个问题,一个带有计数器的简单循环(例如,在C语言中)即使对于VB或Pascal程序员来说也更容易理解。代码第2行的内容没有告诉我什么,它看起来像是自动控制和棘手的。我将深入研究python,当语言变得棘手时,我很好奇。@Giacomo我可能会在实践中将其与注释配对。列表理解在局外人看来有点不可靠,但一旦你习惯了它们,它们就相当不错了。@Rafe,这要看情况而定<代码>过滤器对于有功能背景的人来说很有意义。@Giacomo:列表理解是一个强大的功能,如果你学习了Python,你很快就会了解它们。我不会将代码中使用的特性限制为C语言中存在的特性,只是为了让C程序员能够理解它。当您试图阅读语言L中的代码时,您必须了解一些L。但列表理解很简单。每个了解它们并使用了几天的人都很了解它们。正如我之前所说,它们不是一个模糊的特性,它们在完全可读的Python代码中非常常见。不,您的代码(PHP或其他)对任何人来说都是不可理解的。如果所有的程序员都习惯了完全不同的语言,那么很可能他们也不会。而且也不一定。除此之外,您是否会避免为此目的使用例如字符串插值?