如何在python中反转列表的最后N个元素

Eug*_*ski 5 python list

假设我有一个列表:

>>> numbers = list(range(1, 15))

>>> numbers

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
Run Code Online (Sandbox Code Playgroud)

我只需要使用切片表示法反转最后10个元素

首先,我尝试切片w/o反向

>>> numbers[-10:]

[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
Run Code Online (Sandbox Code Playgroud)

然后:

>>> numbers[-10::-1]

我期望 [14, 13, 12, 11, 10, 9, 8, 7, 6, 5]

但得到了[5, 4, 3, 2, 1].

我可以这样解决问题:

numbers[-10:][::-1]

一切都好

[14, 13, 12, 11, 10, 9, 8, 7, 6, 5]

但我想知道为什么 numbers[-10::-1]在我的情况下不能按预期工作,如果有办法通过一个片获得正确的结果?

And*_*yko 8

有没有办法通过一片获得正确的结果?

好吧,您可以通过下面的代码切片轻松获得正确的结果:

numbers[:-11:-1]
# [14, 13, 12, 11, 10, 9, 8, 7, 6, 5]
Run Code Online (Sandbox Code Playgroud)

为什么数字[-10 :: - 1]不能按预期工作?

好吧它按预期工作,请参阅Explain Python的切片符号问题的答案中所有切片可能性的枚举.请参阅下面的引用(来自上面我已经指出的答案)您的用例的预期行为:

seq[low::stride] =>>> # [seq[low], seq[low+stride], ..., seq[-1]]
Run Code Online (Sandbox Code Playgroud)


hir*_*ist 4

这就是您要找的吗?

numbers = list(range(1, 15))
numbers[:-11:-1]
# [14, 13, 12, 11, 10, 9, 8, 7, 6, 5]
Run Code Online (Sandbox Code Playgroud)

slice.indices‘解释’:

print(slice(None, -11, -1).indices(len(numbers)))
# (13, 3, -1)
Run Code Online (Sandbox Code Playgroud)

意思是

numbers[:-11:-1] == numbers[13:3:-1]
Run Code Online (Sandbox Code Playgroud)