同时使用起止下标与步进会让切片很难懂。
方括号里面写三个值显得太过拥挤,读起来不大容易,而且在指定了步进值(尤其是负数步进值)的时候,我们必须很仔细地考虑:
- 这究竟是从前往后取,还是从后往前取?
somelist[start:end:stride]
取奇数位置与偶数位置
x = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']odds = x[::2]evens = x[1::2]print(odds)print(evens)
反转字符串(非字节数据)
对 bytes 类型的字符串
x = b'mongoose'y = x[::-1]print(y)

Unicode 形式的字符串
x = '寿司'y = x[::-1]print(y)

把字符串编码成 UTF-8 标准的字节数据,就不能用这个技巧来反转了
w = '寿司'x = w.encode('utf-8')y = x[::-1]z = y.decode('utf-8')print(z)
晦涩难懂,不建议
x = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']x[2::2] # ['c', 'e', 'g']x[-2::-2] # ['g', 'e', 'c', 'a']x[-2:2:-2] # ['g', 'e']x[2:2:-2] # []
