Python 列表中的 and 运算符

Fra*_*eau 2 python operators python-3.x

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

list1 and list2
Run Code Online (Sandbox Code Playgroud)

奇怪的行为是 Python 3 没有触发任何错误! list1 and list2实际上有一个值为list2

这有什么已知的原因吗?

Jim*_*ard 5

and只是评估所提供的两个值的真实性。如果第一个是True(请参阅bool(list1)),则计算并返回第二个。如果第一个参数是False(例如[] and list2),则立即返回其值。

有关布尔运算的文档中,明确说明了此行为的基本原理:

请注意,and既不限制它们返回到和 的or值和类型,而是返回最后计算的参数。这有时很有用,例如,如果是一个字符串,如果它为空,则应将其替换为默认值,则表达式会生成所需的值。FalseTruess or 'foo'

(强调我的)

请注意,未发现此行为,而是根据提供的参数not返回True/值。False