我有两个布尔列表,例如,
x=[True,True,False,False]
y=[True,False,True,False]
我想将这些列表与预期的输出一起:
xy=[True,False,False,False]
我以为表达x and y
会起作用,但后来发现它不起作用:事实上,(x and y) != (y and x)
输出x and y
:[True,False,True,False]
输出y and x
:[True,True,False,False]
使用列表推导 确实 具有正确的输出。ew!
xy = [x[i] and y[i] for i in range(len(x)]
请注意,我找不到任何可以告诉我AND运算符的参考,就像我尝试使用x和y一样。但是尝试用Python进行操作很容易。有人可以向我解释发生了x and y
什么吗?
这是一个简单的测试程序:
import random
random.seed()
n = 10
x = [random.random() > 0.5 for i in range(n)]
y = [random.random() > 0.5 for i in range(n)]
# Next two methods look sensible, but do not work
a = x and y
z = y and x
# Next: apparently only the list comprehension method is correct
xy = [x[i] and y[i] for i in range(n)]
print 'x : %s'%str(x)
print 'y : %s'%str(y)
print 'x and y : %s'%str(a)
print 'y and x : %s'%str(z)
print '[x and y]: %s'%str(xy)
and
只需根据它们的真实值返回第一个或第二个操作数。如果第一个操作数被认为是假,则返回它,否则返回另一个操作数。
名单被认为是 真实的 ,当 不为空 ,那么这两个列表被认为是真实的。它们的内容 在这里不起作用 。
由于两个列表都不为空,因此x and y
只需返回第二个列表对象;仅当x
为空时,才返回:
>>> [True, False] and ['foo', 'bar']
['foo', 'bar']
>>> [] and ['foo', 'bar']
[]
请参阅Python文档中的“ 真值测试”
部分
:
可以测试任何对象的真值,用在
if
或while
条件中或用作以下布尔运算的操作数。以下值为“假”:[…]
- 任何空序列,例如
''
,()
,[]
。
[…]
所有其他值都被认为是真实的 -因此许多类型的对象总是真实的。
(重点是我的),以及其下方的 布尔运算
部分
:
x and y
如果 x 为假,则为 x ,否则为 y这是一个短路运算符,因此,如果第一个参数为,则它仅计算第二个参数
True
。
您确实需要显式测试列表中 包含
的值。如您所见,您可以通过列表理解来做到这一点。您可以使用zip()
函数将其重写以配对值:
[a and b for a, b in zip(x, y)]
概述 布尔运算符用于将表达式转为布尔值,一共包含四个运算符。 取反运算符:! 且运算符:&& 或运算符:|| 三元运算符:?: 取反运算符(!) 取反运算符是一个感叹号,用于将布尔值变为相反值,即true变成false,false变成true。 !true // false !false // true 对于非布尔值,取反运算符会将其转为布尔值。可以这样记忆,以下六个值取反后为true,其他值都
问题内容: 结果=>“ asdf” 结果=>“ qwer” 我不明白这些东西是如何工作的。我以为字符串上的布尔运算符会导致类型错误,但事实并非如此。它是否类似于预定义语句,例如“ a if b else c”? 问题答案: 确定答案后,Python 和 和 或 操作停止,并返回上一个扫描对象的值。它们不返回 True 或 False 。我喜欢这个功能,发现自己一直在使用它。 由于非空字符串算作Tr
问题内容: 我对何时应该使用布尔运算符与按位运算符感到困惑 与 与 有人能启发我何时使用每种药物,何时使用一种药物会影响我的结果? 问题答案: 以下是一些准则: 布尔运算符通常用于布尔值,而按位运算符通常用于整数值。 布尔运算符是短路,但按位运算符不是短路。 短路行为在这样的表达式中很有用: 按位运算&符将无法正常工作,因为总是会评估双方,即。当你使用布尔运算符时,如果第一个为False,则不计算
前言 上个礼拜介绍了Shell编程范例之数值运算,对 Shell 下基本数值运算方法做了简单的介绍,这周将一起探讨布尔运算,即如何操作“真假值”。 在 Bash 里有这样的常量(实际上是两个内置命令,在这里我们姑且这么认为,后面将介绍),即 true 和 false,一个表示真,一个表示假。对它们可以进行与、或、非运算等常规的逻辑运算,在这一节,我们除了讨论这些基本逻辑运算外,还将讨论Shell编
问题内容: 此方法搜索第一组单词字符(即),返回第一个匹配的组或出现故障的情况。 相同的函数可以重写为: 这是相同的,并且已记录为行为。作为此页中明确指出: 表达式首先计算; 如果为假,则返回其值;否则,将求值并返回结果值。 但是,作为布尔运算符(甚至在手册中也是如此),我希望返回一个布尔值。结果,当我发现这是如何工作时,我感到非常惊讶。 有什么其他用例,和/或这种不太直观的实现的原理是什么? 问
我试图找出我的DataFrame列中是否存在特定的列,但我有一些问题。 我所做的:使用布尔运算“notin”(我尝试了any()、all()、“in”)来查找特定的列标题,但它似乎工作不正常! 假设我的DataFrame列标题是: 我想看看是否所有的‘M1’、‘M2’、…'M20'和TM1'在那里。如果一个或多个代码丢失,则该代码将不起作用。 所以我说: 现在,假设df具有所有询问列标题,if语句