我在Python中发现了一些非常奇怪的行为。
我的一个学生在试图找到属于两个列表的元素时犯了某种错误,他写道:

list1 and list2

奇怪的行为是Python 3没有触发任何错误!
list1 and list2实际上得到了一个值list2
有什么已知的原因吗?

最佳答案

and只需评估提供的两个值的真实性。
如果第一个是True(请参见bool(list1)),则计算并返回第二个。如果第一个参数是False(例如[] and list2),则立即返回其值。
documentation on Boolean Operations中,清楚地说明了这种行为的基本原理:
请注意,andor都不限制返回到FalseTrue的值和类型,而是返回最后一个计算的参数。这有时很有用,例如,如果s是一个字符串,该字符串应替换为默认值(如果该字符串为空),则表达式s or 'foo'将生成所需的值。
(强调我的)
请注意,此行为不是用not找到的,而是根据提供的参数返回一个True/False值。

关于python - 和Python list 上的运算子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40442432/

10-11 10:27