在Numpy中,我可以像这样生成一个布尔数组:
>>> arr = np.array([1, 2, 1, 2, 3, 6, 9])
>>> arr > 2
array([False, False, False, False, True, True, True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
有可能将比较链接在一起吗?例如:
>>> 6 > arr > 2
array([False, False, False, False, True, False, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud) 比较可以任意链接,例如,
x < y <= z等同于x < y and y <= z,除了y仅评估一次(但在两种情况下z都没有被评估,当x < y发现是假的时).
这些SO问题/答案对这种用法有了更多的了解:
所以像(人为的例子):
if 1 < input("Value:") < 10: print "Is greater than 1 and less than 10"
Run Code Online (Sandbox Code Playgroud)
只要求输入一次.这是有道理的.还有这个:
if 1 < input("Val1:") < 10 < input("Val2:") < 20: print "woo!"
Run Code Online (Sandbox Code Playgroud)
只询问Val2 是否 Val1介于1和10之间,只打印"呜!" 如果 Val2也是10到20之间(证明它们可以'任意链接').这也是有道理的.
但我仍然很好奇这是如何在词法分析器/解析器/编译器(或其他)级别实际实现/解释的.
上面的第一个例子基本上是这样实现的:
x = input("Value:")
1 < x and x < 10: …Run Code Online (Sandbox Code Playgroud) 所以我在网上看了一些代码,我遇到了一条线(在第286行):
if depth > 0 and best <= -MATE_VALUE is None and nullscore > -MATE_VALUE:
我理解困难的部分是best <= -MATE_VALUE is None.
所以我解雇了翻译,看看如何value1 > value2 is value3工作等陈述.
所以我试过了
>>> 5 > 2 is True
False
>>> (5 > 2) is True
True
>>> 5 > (2 is True)
True
Run Code Online (Sandbox Code Playgroud)
我的问题
为什么5 > 2 is True不True呢?这些东西通常如何运作?
谢谢.
我只是偶然发现了Python 3中的以下行.
1 in range(2) == True
Run Code Online (Sandbox Code Playgroud)
我原以为这是True因为1 in range(2)为True,并且True == True是真实的.
但这是输出False.所以它并不意味着相同(1 in range(2)) == True.此外,它并不意味着1 in (range(2) == True)引发错误的相同.
尽管有多年的Python经验,但我还是措手不及.到底是怎么回事?
以下代码输出False,根据Python操作顺序,它应该输出True(顺序应该在 - > ==,而不是相反).为什么==之前会来?
y = "33"
"3" in y == True
Run Code Online (Sandbox Code Playgroud)
产量
False
Run Code Online (Sandbox Code Playgroud) >>> g = [1, True, 5]
>>> print(1 in g in g)
False
>>> g.append(g)
>>> print(1 in g in g)
True
Run Code Online (Sandbox Code Playgroud)
为什么第一个片段在列表中并且也在列表中False时作为输出给出?1True
True当我附加g到它时,为什么它作为输出给出?
是if a[start] <= target < a[mid]一样的a[start] <= target and target<a[mid] and a[start] < a[mid]吗?(我认为不是,但是看起来在外观上是相同的)这是如何工作的?搜索了SO,但找不到答案。
我的实习生刚刚联系我并询问为什么在 Python 中False == False != True求值为 to
True,而false在 JavaScript 中求值。
我认为那个语句是false/ False,无论你怎么解决它,它都会False在我的脑海中吐出来。
详细情况如下:
given:
False == False != True
#Case 1:
False == False => True
True != True => False
#Case 2:
False != True => True
False == True => False
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗?我尝试了 JS,!= and ===但由于类型相同,因此它保持相同的输出。
我无法找到有关它的正确文档。我在 Javascript 中做了同样的事情,两种情况都得到了 False。我知道 3>2 应该被视为 (3>2) -> True|1,因此 3>2>1 是 1>1 这是错误的。如果您能建议一些官方文档和解释,那就太好了。
x = (3 > 2) > 1
打印(x)
错误的
y = 3 > 2 > 1
打印(y)
真的
在C编程中,以下代码块返回False
int a=15, b=10,c=5;
if(a>b>c)
{
printf("True");
}
else
{
printf("False");
}
Run Code Online (Sandbox Code Playgroud)
但在Python中,以下块返回True.
a = 15
b = 10
c = 5
if a > b > c:
print("True")
else:
print("False")
Run Code Online (Sandbox Code Playgroud)
python ×10
python-3.x ×4
operators ×2
arrays ×1
boolean ×1
c ×1
comparison ×1
javascript ×1
membership ×1
numpy ×1
scipy ×1