([False,True]和[True,True])的计算结果为[True,True]

时间:2020-08-20 22:47:33

标签: python python-3.x boolean

我在python 3中观察到以下行为:

>>> ([False, True] and [True, True])
[True, True]

>>> ([False, True] or [True, True])
[False, True]

我原本相反:

[False, True] and [True, True] = [False and True, True and True] = [False, True]
[False, True] or [True, True] = [False or True, True or True] = [True, True]

观察到的行为如何有意义,我如何实现期望的行为?

4 个答案:

答案 0 :(得分:5)

每个列表都作为一个整体进行评估。 [False, True]为True,[True, True]也为True,因为只有一个空列表为False。

and返回最后一个True元素,但是or返回第一个True元素。

答案 1 :(得分:3)

Python不对列表提供按元素操作。您可以使用列表推导:

l1 = [False, True] 
l2 = [True, True]
[x and y for x,y in zip(l1, l2)]
#[False, True]

请注意,其他地方推荐的np.bitwise_and大约慢了一个数量级。。

答案 2 :(得分:2)

您要使用numpy。标准lib python正在评估:

bool([False, True]) and bool([True, True])

由于两者均为True,因此会选择最后一个(尝试1 and 2

如果您这样做:

import numpy
numpy.bitwise_and([False, True], [True, True])

您会得到想要的。

如果不想使用numpy,则需要编写列表理解或循环:

result = [(x and y) for x, y in zip([False, True], [True, True])]

答案 3 :(得分:0)

来自the reference

表达式import SwiftUI import Lottie import CodeScanner struct OnBoardingONE: View { @State private var isShowingScanner = false // Begining of the body view. var body: some View { VStack { LottieView(filename: "QRCode") .frame(width: 250, height: 300) // Begining of the qr-code scann button code Button(action: { self.isShowingScanner = true }) { Text("Scan QR-Code") .frame(width: 200, height: 27) .foregroundColor(.white) .font(.headline) } .sheet(isPresented: $isShowingScanner) { CodeScannerView(codeTypes: [.qr], simulatedData: "Loading...", completion: self.handleScan) } .padding() .background(AnimatedBackgroundGradient()) .cornerRadius(15) .padding(.bottom, 50) } .padding(.bottom, 290) } // Ending of the Body view func handleScan(result: Result<String, CodeScannerView.ScanError>){ self.isShowingScanner = false switch result { case .success(let code) : Webview(url: "") case .failure(let error): print("Scaning failed") } } // Ending of the qr-code scann button code } 首先计算x;如果x为假,则返回其值;否则,将评估y并返回结果值。

您的表达式x and y是一个([False, True] and [True, True])表达式,其中您的x是x and y,而您的y是[False, True]。现在x是假的,还是真的?同样来自该文档:

以下值解释为false:[True, True]False,所有类型的数字零,空字符串和容器(包括字符串,元组,列表,字典,集合和Frozensets)。所有其他值都解释为true。

因此x为true,因此None操作返回y。正是您所得到的。

and类似。

获得所需的按元素操作的另一种方法:

or