首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Python)向相反方向切片列表不能获得第一个元素

(Python)向相反方向切片列表不能获得第一个元素
EN

Stack Overflow用户
提问于 2021-10-21 06:26:20
回答 3查看 93关注 0票数 0

我认为切片的设计在逻辑上似乎很奇怪。

代码语言:javascript
复制
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]

这意味着我们不能通过沿着相反的方向切片来包含第一个元素。甚至我认为很难理解正向切片和反向切片不遵循相同的逻辑。

你怎么想的?感谢您的评论。

===============

谢谢你下面的评论

如果一个列表可以看作是一个循环链接对象,那么index -1表示最后一个元素。

代码语言:javascript
复制
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]   
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-10-21 06:44:51

你可以试试这个来理解这里发生了什么。

代码语言:javascript
复制
print(a[4] == a[-1]) #True
print(a[3] == a[-2]) #True

在这里,a[4:-1:-1]类似于a[4:4-1],如果片的结束索引等于或小于起始索引,则不返回项[]a[4:-2:-1]的意思是a[4:3:-1]。这就是为什么输出是[4]的原因

票数 1
EN

Stack Overflow用户

发布于 2021-10-21 06:29:25

切片总是遵循这个逻辑[start:stop:step]

可以在片中省略值。

从最后到第三(不包括)相反:

代码语言:javascript
复制
a[:2:-1]

相当于:

代码语言:javascript
复制
a[4:2:-1]

输出:[4, 3]

经典逆转:

代码语言:javascript
复制
a[::-1]

相当于:

代码语言:javascript
复制
a[-1::-1]

输出:[4, 3, 2, 1, 0]

票数 1
EN

Stack Overflow用户

发布于 2021-10-21 06:39:48

开始考虑它作为一个循环链表与索引,你会得到这个概念。

-1索引是最后一个元素,0是您的第一个元素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69656882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档