假设我有一个清单:
>>> 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]
在我的情况下没有按预期工作,是否有办法通过一个切片获得正确的结果?
答案 0 :(得分:8)
有没有办法通过一个切片获得正确的结果?
嗯,您可以通过以下代码进行一次切片轻松获得正确的结果:
numbers[:-11:-1]
# [14, 13, 12, 11, 10, 9, 8, 7, 6, 5]
为什么数字[-10 :: - 1]没有按预期工作?
正如预期的那样工作,请参阅answer Explain Python's slice notation个问题中所有切片可能性的列举。请参阅以下针对您的用例的预期行为的引用(来自上面的答案):
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]