当前位置: 首页 > 面试题库 >

两个布尔列表上的Python AND运算符-如何?

韩宏朗
2023-03-14
问题内容

我有两个布尔列表,例如,

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文档中的“ 真值测试”
部分

可以测试任何对象的真值,用在ifwhile条件中或用作以下布尔运算的操作数。以下值为“假”:

[…]

  • 任何空序列,例如''()[]

[…]

所有其他值都被认为是真实的 -因此许多类型的对象总是真实的。

(重点是我的),以及其下方的 布尔运算
部分

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