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行就不一样了呢
scanf调用格式为: scanf("<格式化字符串>",<地址表>); 例如:scanf("%d%d%d",&a,&b,&c);
第二行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
当步长值小于0时,beg默认为len(array)-1,end默认为开头之前。
当 步长值大于0时,beg默认为0,end默认为最末之后。
关于这个(坑爹的)问题我查找了资料已经解决了,这里主要因为步长值对列表切片默认的开始值结束值造成的影响。
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])的区别。