有人能解釋爲什麼一個搜索如下範圍內搜索VS列表iterables
2,2,2,2(20)
得到的結果爲(2,2,2,真)
和範圍5,4,3,19(20)
產生一個結果作爲(5,4,3,真)
像 「蝙蝠俠」 「標籤」 的搜索給出假,而「蝙蝠俠」中的「蝙蝠」是真實的。同樣,爲什麼在上述搜索中沒有保留這個訂單。另外我想解釋一下它給出的結果。
有人能解釋爲什麼一個搜索如下範圍內搜索VS列表iterables
2,2,2,2(20)
得到的結果爲(2,2,2,真)
和範圍5,4,3,19(20)
產生一個結果作爲(5,4,3,真)
像 「蝙蝠俠」 「標籤」 的搜索給出假,而「蝙蝠俠」中的「蝙蝠」是真實的。同樣,爲什麼在上述搜索中沒有保留這個訂單。另外我想解釋一下它給出的結果。
當你這樣做:
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"
英寸這是一個字符串搜索,而不是搜索字符(即不尋找字符)。
2,2,2,2 in range(20)
構造一個元組具有四個元件,前三個是2,而最後是布爾表達式2 in range(20)
計算結果爲True
。
在Python中,逗號創建一個元組。 這有點令人困惑。
所以,2,
將創建一個新的單值元組
雖然,(2)
將返回一個整數。
in
是一個布爾表達式。所以當你輸入2,2,2,2 in range(20)
你正在做什麼創建一個三個2的元組和布爾表達式2 in range(20)
的結果是True
。
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
[在「標籤」下,在「蝙蝠俠」對於C]`結果返回list
和Python3它返回一個range
對象
優秀的解釋 – 2014-10-27 15:09:13
的當然'在'[True,True,False]'中。 – 2014-10-27 05:18:38