如何在Python中获取列表的最后一项?

2024-04-26 18:15:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个列表的最后9个数字,我相信有一种方法可以做到这一点,但我似乎无法得到它。我可以得到这样的前9个:

num_list[0:9]

Tags: 方法列表数字numlist
3条回答

切片

Python切片是一个非常快速的操作,它是快速访问部分数据的一种简便方法。

从列表(或支持它的任何其他序列,如字符串)中获取最后九个元素的切片表示法如下所示:

num_list[-9:]

当我看到这一点时,我把括号里的部分读作“从头到尾第9个。”(实际上,我在心理上把它缩写为“-9,on”)

说明:

完整的符号是

sequence[start:stop:step]

但是冒号告诉Python你给它一个切片而不是一个常规索引。这就是为什么在Python 2中复制列表的惯用方法是

list_copy = sequence[:]

清除它们的方法是:

del my_list[:]

(列表在Python 3中得到list.copylist.clear。)

给你的切片起个描述性的名字!

您可能会发现分离切片的形成与将其传递给list.__getitem__方法(that's what the square brackets do)很有用。即使你不是新手,它也会让你的代码更具可读性,这样其他可能需要阅读你的代码的人就能更容易地理解你在做什么。

但是,不能将一些由冒号分隔的整数赋给变量。您需要使用slice对象:

last_nine_slice = slice(-9, None)

第二个参数None是必需的,因此第一个参数被解释为start参数otherwise it would be the ^{} argument

然后可以将切片对象传递给序列:

>>> list(range(100))[last_nine_slice]
[91, 92, 93, 94, 95, 96, 97, 98, 99]

islice

来自itertools模块的islice是另一种可能的实现方法。islice不接受负参数,因此理想情况下,iterable有一个__reversed__特殊方法,list有这个方法,因此必须首先将list(或iterable with __reversed__)传递给reversed

>>> from itertools import islice
>>> islice(reversed(range(100)), 0, 9)
<itertools.islice object at 0xffeb87fc>

islice允许延迟计算数据管道,因此要具体化数据,请将其传递给构造函数(如list):

>>> list(islice(reversed(range(100)), 0, 9))
[99, 98, 97, 96, 95, 94, 93, 92, 91]

可以将负整数与切片运算符一起使用。下面是一个使用python CLI解释器的示例:

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> a[-9:]
[4, 5, 6, 7, 8, 9, 10, 11, 12]

重要的一行是a[-9:]

负索引将从列表末尾开始计算,因此:

num_list[-9:]

相关问题 更多 >