python列表获取最后一个元素的方法_在Python中获取列表的最后一个元素

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

要获得最后一个元素,

没有修改列表,和

假设你知道列表有最后一个元素(即它是非空的)

将"Python"传递给下标符号:

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

>>> a_list[-1]

'three'

说明

索引和切片可以将负整数作为参数。

我已经修改了文档中的一个示例,以指示每个索引引用的序列中的哪个项目,在本例中,在字符串"Python"中,引用最后一个元素'n':

+---+---+---+---+---+---+

| P | y | t | h | o | n |

+---+---+---+---+---+---+

0 1 2 3 4 5

-6 -5 -4 -3 -2 -1

>>> p = 'Python'

>>> p[-1]

'n'

通过可迭代解包进行分配

此方法可能不必要地实现第二个列表以便获取最后一个元素,但为了完整性(并且因为它支持任何可迭代 - 而不仅仅是列表):

>>> *head, last = a_list

>>> last

'three'

变量名称head绑定到不必要的新创建列表:

>>> head

['zero', 'one', 'two']

如果您打算对该列表不采取任何措施,那么这将更合适:

*_, last = a_list

或者,实际上,如果您知道它是一个列表(或至少接受下标表示法):

last = a_list[-1]

在一个功能

评论者说:

我希望Python有一个函数用于first()和last(),就像Lisp一样......它将摆脱许多不必要的lambda函数。

这些定义非常简单:

def last(a_list):

return a_list[-1]

def first(a_list):

return a_list[0]

或者使用reversed:

>>> import operator

>>> last = operator.itemgetter(-1)

>>> first = operator.itemgetter(0)

在任一情况下:

>>> last(a_list)

'three'

>>> first(a_list)

'zero'

特别案例

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

如果您不熟悉编程,则应该避免使用本节,因为它将语法上不同的算法部分耦合在一起。 如果您在一个地方更改算法,则可能会对另一行代码产生意外影响。

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

切片

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

>>> a_slice = a_list[-1:]

>>> a_slice

['three']

如果列表为空,这具有未失败的好处:

>>> empty_list = []

>>> tail = empty_list[-1:]

>>> if tail:

... do_something(tail)

而尝试通过索引访问会引发需要处理的reversed:

>>> empty_list[-1]

Traceback (most recent call last):

File "", line 1, in

IndexError: list index out of range

但同样,只有在您需要时才应该为此目的进行切片:

创建了一个新列表

如果先前列表为空,则新列表为空。

reversed循环

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

如果您已在列表上执行完整的迭代,则最后一个元素仍将由循环中指定的变量名引用:

>>> def do_something(arg): pass

>>> for item in a_list:

... do_something(item)

...

>>> item

'three'

这在语义上不是列表中的最后一件事。 这在语义上是名称reversed绑定的最后一件事。

>>> def do_something(arg): raise Exception

>>> for item in a_list:

... do_something(item)

...

Traceback (most recent call last):

File "", line 2, in

File "", line 1, in do_something

Exception

>>> item

'zero'

因此,这应该只用于获取最后一个元素

已经循环了,并且

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

获取和删除它

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

>>> a_list.pop(-1)

'three'

>>> a_list

['zero', 'one', 'two']

但现在原始列表已被修改。

(reversed实际上是默认参数,因此可以在没有索引参数的情况下使用next):

>>> a_list.pop()

'two'

只有这样才能做到

你知道列表中有元素,或者如果它是空的,它准备处理异常,并且

你打算从列表中删除最后一个元素,将其视为堆栈。

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

保存其余的反向以供日后使用:

我不知道你为什么要这样做,但为了完整,因为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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值