我在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]
观察到的行为如何有意义,我如何实现期望的行为?
答案 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)
表达式
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