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

问题描述 投票:54回答:4

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

有什么建议吗?在此先感谢

python
4个回答
105
投票

就这么简单:

my_list[-10:]

其他评论: (来自评论部分)

如果初始列表少于10个元素,则此解决方案仍将有效。产生整个列表。例如。如果my_list = [1,2,3],则my_list[-10:]等于[1,2,3]


22
投票

这显示了如何将长列表切成最大大小,然后将其余的放入新列表。这不完全是您要问的,但可能正是您真正想要的:

>>> 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]
>>> 

14
投票

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

在您的情况下,它很简单,如编写:

 new_list = my_list[-10:]

5
投票

实际上,问题陈述中的下标可以正常工作-您可以粘贴自己尝试使用时看到的错误或意外结果吗?这是您建议的下标成功运行:

>>> 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关于切片的约定也很有意义)却给你一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.