有人可以解释为什么搜索如下
2,2,2,2范围(20)
产生的结果为(2,2,2,True)
和范围(20)中的5,4,3,19
得到的结果为(5,4,3,True)
像" tab"在"蝙蝠侠"给出假,而#34; bat"在"蝙蝠侠"是真的。同样,为什么订单未在上述搜索中保留。我也想解释它给出的结果。
答案 0 :(得分:4)
执行此操作时:
2,2,2,2 in range(20)
Python以这种方式看待它:
2,2,2,(2 in range(20))
您希望以这种方式对待它:
(2,2,2,2) in range(20)
但是由于Python不是面向矢量的,所以它并不像那样工作。如果你喜欢用向量编程,NumPy更合适,但对于基本的Python比较,它并不像你想象的那样工作。
至于此:
"tab" in "batman"
当然它返回false,因为字符串"tab"
不在字符串"batman"
中。它是一个字符串搜索,而不是搜索字符(即它不查找字谜)。
答案 1 :(得分:1)
2,2,2,2 in range(20)
构造一个包含四个元素的元组,前三个元素为2,最后一个是布尔表达式2 in range(20)
,其值为True
。
在python中,逗号创建一个元组。 这有点令人困惑。
因此,2,
将创建一个新的单值元组
而(2)
将返回一个整数。
答案 2 :(得分:1)
in
是一个布尔表达式。因此,当您输入2,2,2,2 in range(20)
时,您正在创建包含三个2的元组以及布尔表达式2 in range(20)
的结果,即True
。
答案 3 :(得分:1)
in
调用对象的__contains__
方法,所以
2,2,2,2 in range(20)
装置
2,2,2,(range(20).__contains__(2))
和
5,4,3,19 in range(20)
装置
5,4,3,(range(20).__contains__(19))
因此range
* 返回的对象决定in
的行为方式。
字符串对__contains__
有不同的行为。它可以作为子字符串搜索。
2,2,2,2 in range(20)
是一种不寻常的表达方式。你的意思可能是
all(x in range(20) for x in (2,2,2,2))
*
在Python2 range
中返回list
,在Python3中返回range
对象