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

时间:2017-01-03 14:20:54

标签: python list

假设我有一个清单:

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

>>> numbers

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

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

首先,我尝试切片w / o reverse

>>> numbers[-10:]

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

然后:

>>> 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]在我的情况下没有按预期工作,是否有办法通过一个切片获得正确的结果?

2 个答案:

答案 0 :(得分:8)

  

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

嗯,您可以通过以下代码进行一次切片轻松获得正确的结果:

numbers[:-11:-1]
# [14, 13, 12, 11, 10, 9, 8, 7, 6, 5]
  

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

正如预期的那样工作,请参阅answer Explain Python's slice notationenter image description here问题中所有切片可能性的列举。请参阅以下针对您的用例的预期行为的引用(来自上面的答案):

seq[low::stride] =>>> # [seq[low], seq[low+stride], ..., seq[-1]]

答案 1 :(得分:3)

是你在寻找什么?

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

slice.indices'解释':

print(slice(None, -11, -1).indices(len(numbers)))
# (13, 3, -1)

意思是

numbers[:-11:-1] == numbers[13:3:-1]