2016-06-19 63 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

是的,我猜想:)我可以问你想在什么情况下获得这个价值?我无法想象自己的用例 –

相关问题