Python中x[::-1]切片的工作原理及等价写法探究
Python 中 x[::-1] 的等价切片写法
嘿,这个问题问到点子上了!很多刚接触 Python 切片的同学都会在这里卡壳,我来给你讲明白~
首先,咱们先回忆下切片的完整语法:x[start:stop:step],当 step 为负数时,切片会从 start 位置倒着取元素,直到碰到 stop 位置(注意:stop 对应的元素不会被包含进去)。
你提到的 x[len(x)-1:0:-1] 之所以不行,就是因为 stop 设为 0,最后会漏掉索引为 0 的那个元素(也就是字符串里的第一个字符)。那正确的等价写法有两种常见方式:
写法一:省略 stop 参数
直接写成x[len(x)-1::-1]。当step为负且stop省略时,Python 会一直倒着取到序列的最开头(包含第一个元素)。比如对x = 'abcde',len(x)-1是4(对应字符 'e'),从这里倒着取,就会得到'edcba',和x[::-1]结果完全一致。写法二:用负索引指定 start
写成x[-1::-1]也可以,-1是最后一个元素的索引,同样省略stop,效果和上面完全一样,写法更简洁。
还有一种更“严谨”的完整写法是 x[len(x)-1 : -len(x)-1 : -1],这里 -len(x)-1 相当于在序列的最开头之前的位置(对于长度为5的字符串,就是 -6),这样切片就会包含从最后一个元素到第一个元素的所有内容,但日常写代码很少这么用,毕竟前面两种更直观简洁。
最后用代码验证下效果:
x = 'abcde' print(x[::-1]) # 输出 'edcba' print(x[4::-1]) # 输出 'edcba' print(x[-1::-1]) # 输出 'edcba' print(x[4:-6:-1]) # 输出 'edcba' print(x[4:0:-1]) # 输出 'edcb'(少了'a',这就是之前的问题)
内容的提问来源于stack exchange,提问作者Dylan Kidd
相关产品推荐
相关产品推荐

