假设我有一个列表:
>>> 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]在我的情况下不能按预期工作,如果有办法通过一个片获得正确的结果?
有没有办法通过一片获得正确的结果?
好吧,您可以通过下面的代码切片轻松获得正确的结果:
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)
这就是您要找的吗?
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)
| 归档时间: |
|
| 查看次数: |
2813 次 |
| 最近记录: |