指數的最Python的方式:獲得給定一個列表中最後一個列表項
l1 = [0, 211, 576, 941, 1307, 1672, 2037]
什麼是獲取列表的最後一個元素的索引的最Python的方式。鑑於Python的列表是零索引,是它:
len(l1) - 1
或者,是它使用Python的列表操作如下:
l1.index(l1[-1])
都返回相同的值,即6
指數的最Python的方式:獲得給定一個列表中最後一個列表項
l1 = [0, 211, 576, 941, 1307, 1672, 2037]
什麼是獲取列表的最後一個元素的索引的最Python的方式。鑑於Python的列表是零索引,是它:
len(l1) - 1
或者,是它使用Python的列表操作如下:
l1.index(l1[-1])
都返回相同的值,即6
只有第一個是正確的:
>>> 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
注意,第二定時是在納秒與毫秒爲第一個。
這個答案全面地捕捉了我問的問題中的雙重問題:重複和速度的問題。感謝所有回答和澄清我的懷疑的人。 –
您應該使用第一個。爲什麼?
>>> l1 = [1,2,3,4,3]
>>> l1.index(l1[-1])
2
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
我不想使用枚舉(),因爲我並不是真的有興趣遍歷整個列表,知道它是我想要的最後一個元素。然而,正如Bakuriu等人指出的那樣,它實際上是更多的工作,因爲它也涉及價值比較等。我有這個疑問的原因是在Python編程中是否可以接受像len(list)這樣的東西 - 1 :) –
是的,我猜想:)我可以問你想在什麼情況下獲得這個價值?我無法想象自己的用例 –
'LEN(L1) - 1' - 絕對是更快(更有效) – MaxU
它也更有效,因爲如果最後一個項目在列表中較早被複制,則沒有錯誤。 – ShadowRanger
幾乎可以肯定是前者。使用後者需要對列表和函數調用進行索引。前者只是一個函數調用。這也更明顯。 – erip