在Python中获取列表的最后一个元素

在Python中,你如何得到列表的最后一个元素?

some_list[-1]是最短和最Pythonic。

事实上,你可以用这个语法做更多的事情。 some_list[-n]语法获得倒数第n个元素。 所以some_list[-1]得到最后一个元素, some_list[-2]得到倒数第二个等等,一直到some_list[-len(some_list)] ,这给了你第一个元素。

你也可以用这种方式设置列表元素。 例如:

 >>> some_list = [1, 2, 3] >>> some_list[-1] = 5 # Set the last element >>> some_list[-2] = 3 # Set the second to last element >>> some_list [1, 3, 5] 

如果你的str()或者list()对象最终可能是空的,如: astr = ''或者alist = [] ,那么你可能想用alist[-1:]代替alist[-1]千篇一律”。

这个的意义是:

 alist = [] alist[-1] # will generate an IndexError exception whereas alist[-1:] # will return an empty list astr = '' astr[-1] # will generate an IndexError exception whereas astr[-1:] # will return an empty str 

在这里区分的是返回一个空列表对象或空str对象是更多的“最后一个元素”,就像一个exception对象。

你也可以这样做:

 alist.pop() 

这取决于你想用你的列表做什么,因为pop()方法将删除最后一个元素。

在python中显示最后一个元素的最简单的方法是

 >>> list[-1:] # returns indexed value [3] >>> list[-1] # returns value 3 

还有很多其他的方法可以达到这样的目的,但是这些方法使用起来又短又甜。

some_list = [1,2,3]

方法1:

 some_list[-1] 

方法2:

 **some_list.reverse()** **some_list[0]** 

方法3:

 some_list.pop() 
 mylist = [ 1 , 2 , 3 , 4 , 5] #------------------------------------ # Method-1 : Last index #------------------------------------ print(mylist[-1]) #------------------------------------ # Method-2 : Using len #------------------------------------ print(mylist[len(mylist) - 1]) #------------------------------------ # Method-3 : Using pop, pop will remove the last # element from the list. #------------------------------------ print(mylist.pop()) 

好吧,但是几乎所有语言方式中的常见items[len(items) - 1]呢? 这是海事组织获得最后一个元素的最简单方法,因为它不需要任何pythonic知识。

list[-1]将在不更改列表的情况下检索list[-1]的最后一个元素。 list.pop()将检索列表的最后一个元素,但会改变/更改原始列表。 通常,不build议改变原始列表。

另外,如果出于某种原因,你正在寻找一些pythonicless的东西,你可以使用list[len(list)-1] ,假设列表不是空的。

在Python中,你如何得到列表的最后一个元素?

为了得到最后一个元素,

  • 不用修改列表,
  • 假设你知道该列表最后一个元素(即它是非空的)

传递-1给下标符号:

 >>> a_list = ['zero', 'one', 'two', 'three'] >>> a_list[-1] 'three' 

说明

索引和片可以采用负整数作为参数。

我已经修改了文档中的一个例子来指出每个索引引用的序列中的哪个项目,在这种情况下,在string"Python"-1引用了最后一个元素,即字符'n'

  +---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 -6 -5 -4 -3 -2 -1 >>> p = 'Python' >>> p[-1] 'n' 

在一个函数中

一位评论者说:

我希望Python有像Lisp那样的第一个()和最后一个()函数…它将摆脱许多不必要的lambda函数。

这些定义非常简单:

 def last(a_list): return a_list[-1] def first(a_list): return a_list[0] 

或者使用operator.itemgetter

 >>> import operator >>> last = operator.itemgetter(-1) >>> first = operator.itemgetter(0) 

在任一情况下:

 >>> last(a_list) 'three' >>> first(a_list) 'zero' 

特殊情况

如果你正在做一些更复杂的事情,你可能会发现,以最不同的方式获得最后一个元素的性能会更高。

如果你是编程新手,你应该避免这一部分,因为它将algorithm的语义不同部分耦合在一起。 如果您在一个地方更改algorithm,可能会对另一行代码产生意想不到的影响。

我试图尽可能提供警告和条件,但我可能错过了一些东西。 如果您认为我要留下警告,请发表评论。

切片

列表的一个片段返回一个新的列表 – 所以我们可以从-1切片到最后,如果我们要在新的列表中的元素:

 >>> a_slice = a_list[-1:] >>> a_slice ['three'] 

如果列表是空的,则不会失败:

 >>> empty_list = [] >>> tail = empty_list[-1:] >>> if tail: ... do_something(tail) 

而试图通过索引访问引发了需要处理的IndexError

 >>> empty_list[-1] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range 

但是,再次,切片这个目的应该只做如果您需要:

  • 一个新的列表创build
  • 如果先前的清单是空的,则新清单将是空的。

for循环

作为Python的一个特性,在for循环中没有内部作用域。

如果您已经对列表执行了完整的迭代,则最后一个元素仍然会被循环中分配的variables名引用:

 >>> def do_something(arg): pass >>> for item in a_list: ... do_something(item) ... >>> item 'three' 

这在名单上不是语义上的最后一件事。 这在语义上是名称, item绑定的最后一件事。

 >>> def do_something(arg): raise Exception >>> for item in a_list: ... do_something(item) ... Traceback (most recent call last): File "<stdin>", line 2, in <module> File "<stdin>", line 1, in do_something Exception >>> item 'zero' 

因此,这只能用来获得最后一个元素,如果你

  • 已经循环了,
  • 你知道循环将完成(不会因为错误而中断或退出),否则它将指向循环引用的最后一个元素。

获取并删除它

我们也可以通过删除并返回最后一个元素来改变我们的原始列表:

 >>> a_list.pop(-1) 'three' >>> a_list ['zero', 'one', 'two'] 

但是现在原来的列表被修改了。

-1实际上是默认参数,所以list.pop可以在没有索引参数的情况下使用):

 >>> a_list.pop() 'two' 

只有这样做,如果

  • 你知道列表中有元素,或者准备处理exception,如果它是空的
  • 你打算从列表中删除最后一个元素,将其视为一个堆栈。

这些是有效的用例,但不是很常见。

稍后保存其余部分:

我不知道你为什么要这样做,但为了完整性,由于reversed返回一个迭代器 (它支持迭代器协议),所以你可以将结果传递给next

 >>> next(reversed([1,2,3])) 3 

所以这就像做了相反的事情:

 >>> next(iter([1,2,3])) 1 

但是我不能想到这么做的一个好理由,除非你稍后需要反向迭代器的其余部分,这可能看起来更像这样:

 reverse_iterator = reversed([1,2,3]) last_element = next(reverse_iterator) use_later = list(reverse_iterator) 

现在:

 >>> use_later [2, 1] >>> last_element 3 

如果您不想在列表为空时收到IndexError,则也可以使用下面的代码。

 next(reversed(some_list), None) 

如果你只想得到列表的最后一个值,你应该使用:

 your_list[-1] 

如果你想获得价值,也从列表中删除 ,你可以使用:

 your_list.pop() 
 popes = ['john paul II', 'benedict XIV', 'francis I'] current_pope = [] for pope in popes: current_pope = pope 

在for循环之后,你将得到current_popevariables的最后一项。