首页 新闻 会员 周边 捐助

怎么理解PYTHON 列表list切片时第三个参数?

0
[待解决问题]
复制代码
 1 >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan']
 2 >>> print (list_test[:])
 3 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan']
 4 >>> print (list_test[-5:])
 5 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan']
 6 >>> print (list_test[::-1])
 7 ['wutenglan', 'jize', 'canglaoshi', 'xiaoze', 'boduo']
 8 >>> print (list_test[-5::-1])
 9 ['boduo']
10 >>> 
复制代码

关于上面负索引切片该怎么理解呢

为什么第2行第4行输出的结果一样,但是到了第6行第8行就不一样了呢

zombiesChen的主页 zombiesChen | 菜鸟二级 | 园豆:204
提问于:2018-08-04 11:36
< >
分享
所有回答(3)
0

scanf调用格式为:  scanf("<格式化字符串>",<地址表>); 例如:scanf("%d%d%d",&a,&b,&c); 

.NET_海 | 园豆:480 (菜鸟二级) | 2018-08-04 13:54
0

第二行print (list_test[:]) 就是复制了list_test这个列表

第四行print (list_test[-5:]) 就是从右往左数打印出来5个list_test的元素

第六行 print (list_test[::-1])就是反着打印list_test列表  其中-1是步长 

第八行print (list_test[-5::-1]) 就是从左往数打印出来5个list_test的元素  打印出来的顺序和第四行恰好相反 就是因为步长为-1

冷色调的夏天 | 园豆:218 (菜鸟二级) | 2018-08-04 16:43

 当步长值小于0时,beg默认为len(array)-1,end默认为开头之前。

 当 步长值大于0时,beg默认为0,end默认为最末之后。

支持(0) 反对(0) zombiesChen | 园豆:204 (菜鸟二级) | 2018-08-04 17:50
0

关于这个(坑爹的)问题我查找了资料已经解决了,这里主要因为步长值对列表切片默认的开始值结束值造成的影响。 

list[beg:end:step]

若  step > 0, 则表示从左向右进行切片。此时,beg必须小于end才有结果,否则为空。

若  step < 0, 则表示从右向左进行切片。 此时,beg必须大于end才有结果,否则为空。

比如上面代码处第8行,当step(步长值)小 于0,此时列表切片的默认值为beg=-1,end=-5;但是由于我把beg设成-5,导致只能捕获到一个元素。

所以这就是print(list_test[-5:])与print(list_test[-5::-1])的区别。 

zombiesChen | 园豆:204 (菜鸟二级) | 2018-08-04 18:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册