2012-08-30 40 views
-1

可能是一個愚蠢的問題,但我總體上想知道,如果有人知道,Python解釋器有多遠見,特別是在正則表達式和文本解析領域。python解釋器有多聰明?

假設我在某些時候的代碼如下所示:

mylist = ['a', 'b', 'c', ... ] 

if 'g' in list: print(mylist.index('g')) 

有while循環或類似做到這一點任何安全的方式。我的意思是,從一開始就要從第二個解析中查找索引,還是Python的頭腦中的兩個g(在上面的行中)是相同的東西?

+0

這不是「解析」這麼多,因爲它是「搜索」來包裝這樣的事情。 – PaulMcG

回答

0

嘗試做一些這樣的查找的開銷是更好的選擇,找出元素在列表中的索引。 嘗試: 打印(mylist.index(「G」)) 除了ValueError異常: 打印「值不在列表中的」

4

它會做查找兩次。如果這是值得的(平說,一個非常大的列表),使用try

try: 
    print(mylist.index('g')) 
except ValueError: 
    pass 
4

圍堵檢查的結果不被緩存,並且因此指數將需要重新發現。 Python的動態特性使得這種事情的隱式緩存變得不可靠,因爲__contains__()方法可能會改變對象(儘管這樣做會違反若干編程原則)。

1

您的代碼將導致兩次查找,首先確定'g'是否在列表中,其次是找到索引。 Python不會嘗試將它們合併爲一個查詢。如果你擔心效率問題,你可以使用字典來代替O(1)而不是O(n)的列表。

1

你可以很容易地讓一個字典查找。事情是這樣的:

mydict = {k:v for v,k in enumerate(mylist)} 

創建dict將不值得,除非你是在同一個list

0

是它會擡起頭兩次,Python解釋器不緩存指令,儘管我一直想知道它是否可能(對於某些事情),如果這是一個問題,那麼你可以使用setsdicts,它們都具有恆定的查找時間。似乎

無論哪種方式,你LBYL,在蟒蛇我們往往EAFP所以它很常見的try ... except