文章目录
- 一、问题
- 二、结论
- 三、一些知识点、用法总结
一、问题
今天在学习程序的时候,发现了一种对列表的切片操作:list[0:2][::-1],其中list=[1,2,3],输出结果是[2,1]。
>>> a=[1,2,3]
>>> a[0:2][::-1]
[2, 1]
对此我产生了两个疑问:
1.list[..][..]这种形式是什么意思?
2.为什么不用一个[..]来输出同样的结果?比如用list[0:2:-1]输出上述结果?
二、结论
1.list后接多个[..]可以看做 依次对list这个列表进行切片操作,如:
>>> a=[0,1,2,3,4,5,6,7,8,9]
>>> a[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[0:8]
[0, 1, 2, 3, 4, 5, 6, 7]
>>> a[0:8][2:6]
[2, 3, 4, 5]
>>> a[0:8][2:6][1:]
[3, 4, 5]
2.对于list=[1,2,3],list[0:2:-1]的结果是:
>>> a=[1,2,3]
>>> a[0:2:-1]
[]
正确的写法应该是:
>>> a=[1,2,3]
>>> a[1::-1]
[2, 1]
这是因为我一直没搞清楚[a:b:c]的含义,我一直以为切片切出来的数值是从列表中(从左向右数)第a个(闭)到第b个(开),步长为c。而正确的含义应该是:a是开始的切的第一个元素(闭) b第一个不被切到的元素(开),步长为c。
按我原先的理解从左到右取是没问题的,但是从右到左就不行了,所以才会出现这种错误的想法。
三、一些知识点、用法总结
不想写了,直接看大佬的知识点总结