(Python) 反向切片列表无法获取第一个元素
(Python) slicing a list in reverse direction can not get first element
我觉得slice的设计逻辑有点奇怪
a = [0,1,2,3,4]
# slice along forward direction
b = a[3:4:1] # ok it gives [3]
c = a[3:5:1] # ok it gives [3,4]
d = a[3:6:1] # ok it gives [3,4] , even exceed the upper bound
# slice along reverse direction
b = a[4:1:-1] # ok it gives [4,3,2]
c = a[4:0:-1] # ok it gives [4,3,2,1]
d = a[4:-1:-1] # it gives [] not expected [4,3,2,1,0]
e = a[4:-2:-1] # it gives [4] not expected [4,3,2,1,0]
这意味着我们不能通过反向切片来包含第一个元素。
连我都觉得很难理解正向和反向切片不遵循相同的逻辑。
你怎么看?感谢您的评论。
===============
感谢您的以下评论
如果一个列表可以看作是一个循环链接的对象
索引 -1 表示最后一个元素
a = [0, 1, 2, 3, 4 ]
# the index will be
0,1,2,3,4
# or
-5,-4-3,-2-1
# a[-5]
0 # as expected
# when I slice
a[4:-1:-1] # it should give element with index start=4,3,2,1,end =0 , step=-1
# the expected results
a[4],a[3],a[2],a[1],a[0]
切片总是遵循这个逻辑[start:stop:step]
。
您可以在切片中省略值。
从最后到第三(排除)倒数:
a[:2:-1]
相当于:
a[4:2:-1]
输出:[4, 3]
经典反转:
a[::-1]
相当于:
a[-1::-1]
输出:[4, 3, 2, 1, 0]
开始将其视为带索引的循环链表,您将了解这个概念。
-1 索引是您的最后一个元素,0 是您的第一个元素。
你可以试试这个来了解这里发生了什么。
print(a[4] == a[-1]) #True
print(a[3] == a[-2]) #True
这里,a[4:-1:-1]
类似于a[4:4-1]
如果切片的结束索引等于或小于开始索引,则 returns 没有项目 []
。
并且,a[4:-2:-1]
表示 a[4:3:-1]
。这就是为什么输出是 [4]
我觉得slice的设计逻辑有点奇怪
a = [0,1,2,3,4]
# slice along forward direction
b = a[3:4:1] # ok it gives [3]
c = a[3:5:1] # ok it gives [3,4]
d = a[3:6:1] # ok it gives [3,4] , even exceed the upper bound
# slice along reverse direction
b = a[4:1:-1] # ok it gives [4,3,2]
c = a[4:0:-1] # ok it gives [4,3,2,1]
d = a[4:-1:-1] # it gives [] not expected [4,3,2,1,0]
e = a[4:-2:-1] # it gives [4] not expected [4,3,2,1,0]
这意味着我们不能通过反向切片来包含第一个元素。 连我都觉得很难理解正向和反向切片不遵循相同的逻辑。
你怎么看?感谢您的评论。
===============
感谢您的以下评论
如果一个列表可以看作是一个循环链接的对象 索引 -1 表示最后一个元素
a = [0, 1, 2, 3, 4 ]
# the index will be
0,1,2,3,4
# or
-5,-4-3,-2-1
# a[-5]
0 # as expected
# when I slice
a[4:-1:-1] # it should give element with index start=4,3,2,1,end =0 , step=-1
# the expected results
a[4],a[3],a[2],a[1],a[0]
切片总是遵循这个逻辑[start:stop:step]
。
您可以在切片中省略值。
从最后到第三(排除)倒数:
a[:2:-1]
相当于:
a[4:2:-1]
输出:[4, 3]
经典反转:
a[::-1]
相当于:
a[-1::-1]
输出:[4, 3, 2, 1, 0]
开始将其视为带索引的循环链表,您将了解这个概念。
-1 索引是您的最后一个元素,0 是您的第一个元素。
你可以试试这个来了解这里发生了什么。
print(a[4] == a[-1]) #True
print(a[3] == a[-2]) #True
这里,a[4:-1:-1]
类似于a[4:4-1]
如果切片的结束索引等于或小于开始索引,则 returns 没有项目 []
。
并且,a[4:-2:-1]
表示 a[4:3:-1]
。这就是为什么输出是 [4]