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

sur*_*ura 47 python

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

有什么建议?提前致谢

Fel*_*Yan 97

它就像这样简单:

my_list[-10:]
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,如果初始列表少于10个元素,那么这个解决方案仍然会产生整个列表.例如,如果`my_list = [1,2,3]`,那么`my_list [-10:]`等于`[1,2,3]`. (22认同)

dka*_*ins 20

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

>>> 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]
Run Code Online (Sandbox Code Playgroud)

这更像你所要求的,基本相同,但从最后采取新的列表:

>>> 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]
>>> 
Run Code Online (Sandbox Code Playgroud)

  • @Benjamin:撇开以下事实:a)实际的交互式示例可能非常有用b)我在看到其他答案之前就开始回答这个问题,你完全没有理解在Stack Overflow上进行downvoting的目的.祝贺你,祝你有个美好的一天! (11认同)
  • @Benjamin:PS 以供将来参考:“我什么时候应该投票否决?每当您遇到非常草率、不费吹灰之力的帖子,或者明显错误且可能危险地不正确的答案时,请使用您的反对票。” ( http://stackoverflow.com/privileges/vote-down ) (2认同)
  • 也许有一些反对票的徽章,所以本杰明做到了。:) @dkamins 不要太担心。他得到了 -1 的代表反对票(除了你的 -2)。 (2认同)

Ray*_*ger 14

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

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

 new_list = my_list[-10:]
Run Code Online (Sandbox Code Playgroud)


Bra*_*des 6

实际上,您问题陈述中的下标效果很好——您能否准确粘贴一下您自己尝试使用时看到的错误或意外结果?这是您建议的下标的成功运行:

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

问题仅仅是您忘记my_list在切片符号前命名吗?

编辑:正如 Felix 所指出的,您应该防止索引变为负值:

my_list[max(0, len(my_list) - 10):]
Run Code Online (Sandbox Code Playgroud)

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

  • 当他的列表长度 < 10 时。 (4认同)