Python - 如何从列表中提取最后的x个元素

时间:2011-12-19 00:46:16

标签: python

如果python列表的长度大于给定值(比如10),那么我想将该列表中的最后10个元素提取到新列表中。 我怎样才能做到这一点? 我尝试区分len(my_list) - 10并将其用作:new_list = [(len(my_list) - 10):]这不起作用

有什么建议吗? 提前致谢

4 个答案:

答案 0 :(得分:90)

它就像:

一样简单
my_list[-10:]

答案 1 :(得分:19)

这显示了如何将长列表切割成最大大小,并将其余列表放在新列表中。这不完全是你所要求的,但它可能是你真正想要的:

>>> list1 = [10, 20, 30, 40, 50, 60, 70]
>>> max_size = 5
>>> list2 = list1[max_size:]
>>> list2
[60, 70]
>>> list1 = list1[:max_size]
>>> list1
[10, 20, 30, 40, 50]

这更像你要问的内容,基本相同,但从最后开始采用新列表:

>>> list1 = [10, 20, 30, 40, 50, 60, 70]
>>> list2 = list1[:max_size]
>>> list2
[10, 20, 30, 40, 50]
>>> list2 = list1[-max_size:]
>>> list2
[30, 40, 50, 60, 70]
>>> list1 = list1[:-max_size]
>>> list1
[10, 20]
>>> 

答案 2 :(得分:14)

Python教程有一节如何使用列表切片:http://docs.python.org/tutorial/introduction.html#lists

在你的情况下,它就像写作一样简单:

 new_list = my_list[-10:]

答案 3 :(得分:4)

实际上,你问题陈述中的下标完美无缺 - 你可以自己粘贴你在尝试使用它时看到的错误或意外结果吗?以下是您建议的下标的成功运行:

>>> my_list = list('abcdefghijklmnop')
>>> new_list = my_list[(len(my_list) - 10):]
>>> new_list
['g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p']

问题只是忘记在切片表示法前面命名my_list吗?

编辑:正如Felix所说,你应该阻止索引变为否定:

my_list[max(0, len(my_list) - 10):]

当然,正如其他答案所指出的那样,持续的负面指数实际上是实现目标的最简单方法;但我想首先关注为什么你的“自己的方式”获得最后十个元素 - 这是有意义的,即使它没有充分利用Python关于切片的约定 - 而是给你一个错误。