指数的最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