2016-06-19 93 views
2

指數的最Python的方式:獲得給定一個列表中最後一個列表項

l1 = [0, 211, 576, 941, 1307, 1672, 2037] 

什麼是獲取列表的最後一個元素的索引的最Python的方式。鑑於Python的列表是零索引,是它:

len(l1) - 1 

或者,是它使用Python的列表操作如下:

l1.index(l1[-1]) 

都返回相同的值,即6

+5

'LEN(L1) - 1' - 絕對是更快(更有效) – MaxU

+2

它也更有效,因爲如果最後一個項目在列表中較早被複制,則沒有錯誤。 – ShadowRanger

+0

幾乎可以肯定是前者。使用後者需要對列表和函數調用進行索引。前者只是一個函數調用。這也更明顯。 – erip

回答

2

只有第一個是正確的:

>>> lst = [1, 2, 3, 4, 1] 
>>> len(lst) - 1 
4 
>>> lst.index(lst[-1]) 
0 

但是這取決於你是什麼意思的「指數最後一個元素「。

注意index必須以提供一個答案遍歷整個列表:

In [1]: %%timeit lst = list(range(100000)) 
    ...: lst.index(lst[-1]) 
    ...: 
1000 loops, best of 3: 1.82 ms per loop 

In [2]: %%timeit lst = list(range(100000)) 
len(lst)-1 
    ...: 
The slowest run took 80.20 times longer than the fastest. This could mean that an intermediate result is being cached. 
10000000 loops, best of 3: 109 ns per loop 

注意,第二定時是在納秒毫秒爲第一個。

+0

這個答案全面地捕捉了我問的問題中的雙重問題:重複和速度的問題。感謝所有回答和澄清我的懷疑的人。 –

2

您應該使用第一個。爲什麼?

>>> l1 = [1,2,3,4,3] 
>>> l1.index(l1[-1]) 
2 
0

Bakuriu的回答非常棒!

另外,應該提到你很少需要這個值。通常有其他更好的方法來做你想做的事情。考慮這個答案阿里納斯:)

正如你提到的,獲得最後一個元素是可以做到這樣:

lst = [1,2,4,2,3] 
print lst[-1] # 3 

如果您需要遍歷列表,您應該這樣做:

for element in lst: 
    # do something with element 

如果您仍需要索引,這是首選的方法:

for i, element in enumerate(lst): 
    # i is the index, element is the actual list element 
+0

我不想使用枚舉(),因爲我並不是真的有興趣遍歷整個列表,知道它是我想要的最後一個元素。然而,正如Bakuriu等人指出的那樣,它實際上是更多的工作,因爲它也涉及價值比較等。我有這個疑問的原因是在Python編程中是否可以接受像len(list)這樣的東西 - 1 :) –

+1

是的,我猜想:)我可以問你想在什麼情況下獲得這個價值?我無法想象自己的用例 –

相關問題