Python - 如何从列表中提取最后一个 x 元素
Posted
技术标签:
【中文标题】Python - 如何从列表中提取最后一个 x 元素【英文标题】:Python - How to extract the last x elements from a list [duplicate] 【发布时间】:2012-01-23 06:33:15 【问题描述】:如果 python 列表的长度大于给定值(比如 10),那么我想将该列表中的最后 10 个元素提取到一个新列表中。 我怎样才能做到这一点? 我尝试获取 len(my_list) - 10 之间的区别并将其用作: new_list = [(len(my_list) - 10):] 不起作用
有什么建议吗? 提前致谢
【问题讨论】:
“which doesn't work”不是有效的故障描述。 【参考方案1】:就这么简单:
my_list[-10:]
补充说明: (来自 cmets 部分)
如果初始列表少于 10 个元素,那么此解决方案仍然可以产生整个列表。例如。如果my_list = [1,2,3]
,则my_list[-10:]
等于[1,2,3]
【讨论】:
值得一提的是,如果初始列表少于 10 个元素,那么此解决方案仍然可以生成整个列表。例如。如果my_list = [1,2,3]
,则my_list[-10:]
等于[1,2,3]
。【参考方案2】:
这显示了如何将长列表切割成最大尺寸并将其余部分放入新列表中。这不是你要问的,但它可能是你真正想要的:
>>> 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]
>>>
【讨论】:
已经有两个很好的答案了,这并没有增加太多。很抱歉投了反对票。 @Benjamin:撇开以下事实不谈:a)一个实际的交互式示例可能非常有帮助,b)我在看到其他答案之前就开始回答这个问题,你完全不明白投反对票的目的堆栈溢出。恭喜你,祝你有美好的一天! @Benjamin: P.S.供将来参考:“我什么时候应该投反对票?每当您遇到一个非常草率、不费吹灰之力的帖子,或者一个明显不正确且可能非常不正确的答案时,请使用您的反对票。” (***.com/privileges/vote-down) 供将来参考:人们出于不同的原因使用反对票,上面已经说明了我的。如果答案是正确的,我的反对票将被反对票反对 也许有一些标记可以拒绝投票,所以本杰明做到了。 :) @dkamins 不用太担心。他得到-1代表负投票(除了你的-2)。【参考方案3】:Python 教程中有一节如何使用列表切片:http://docs.python.org/tutorial/introduction.html#lists
在你的情况下,就像写作一样简单:
new_list = my_list[-10:]
【讨论】:
【参考方案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 关于切片的约定——反而会给你一个错误。
【讨论】:
当他的列表长度 哦,你是对的。我刚刚忘记了 my_list :( @FelixYan — 你说得对,我会解决的! 无需防范负切片边界。 @hop — 是的,有。例如,如果他的列表长度为 9,则索引将变为 -1,这只会给他从列表末尾开始的一个元素切片,而不是他实际上想要的 9 个元素(假设,如果他不能得到十个,他想要“尽可能接近十个”)。以上是关于Python - 如何从列表中提取最后一个 x 元素的主要内容,如果未能解决你的问题,请参考以下文章