任务:检查'value'是否在list_1 AND list_2
中以下方法 - 是2分钟直观播放的结果
list_1 = ['3', '5']
list_2 = ['5', '7', '4']
r = '5' in (list_1 and list_2) # 'and' gets an intersection
print(r) #True
它以我期望的方式工作。我已经看过像that这样的解决方案了 - 它有效,但我的误会还有一点空间,这就是我问的原因
(1)找不到文档,描述'和'运算符(应该)如何工作, 列表,dicts,元组等。
(2)为什么以下代码返回'False'
list_1 = ['3', '5']
list_2 = ['5', '7', '4']
r = '5' in (list_1, list_2) # Tuple?
print(r) #False
(3)为什么它会返回 ['5','7','4']
list_1 = ['3', '5']
list_2 = ['5', '7', '4']
r = '5' in list_1 and list_2
print(r) # ['5', '7', '4']
(4)为什么它返回(True,['5','7','4'])
list_1 = ['3', '5']
list_2 = ['5', '7', '4']
r = '5' in list_1, list_2
print(r) # (True, ['5', '7', '4'])
我相信在python docs网站上有一些文档,它启发了上面的问题。有可能花一些时间学习python 3源代码来查看实现细节,但我想知道在Python 3实现时使用的一些语言标准(如ECMAScript)
答案 0 :(得分:3)
你对第一个片段的直觉是错误的。 and
如果两者都是真的,则返回其第二个运算符,因此它返回第二个列表;所以你的陈述实际上等同于'5' in list_2
,恰好是真的。
第二个是假的,因为元组实际上现在是(['3', '5'], ['5', '7', '4'])
- 即两个元素的元组,两个元素都是列表。 in
将检查元组的任何成员是否为字符串'5',但它们都不是。
另外两个答案与运营商优先权有关;第三个相当于('5' in list_1) and list_2
,它返回list_2,如上所述;第三个相当于(('5' in list_1), list_2)
。