同时使用起止下标与步进会让切片很难懂。

方括号里面写三个值显得太过拥挤,读起来不大容易,而且在指定了步进值(尤其是负数步进值)的时候,我们必须很仔细地考虑:

  • 这究竟是从前往后取,还是从后往前取?
  1. somelist[start:end:stride]

取奇数位置与偶数位置

  1. x = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']
  2. odds = x[::2]
  3. evens = x[1::2]
  4. print(odds)
  5. print(evens)

image.png

反转字符串(非字节数据)

  • 对 bytes 类型的字符串

    1. x = b'mongoose'
    2. y = x[::-1]
    3. print(y)

    image.png

  • Unicode 形式的字符串

    1. x = '寿司'
    2. y = x[::-1]
    3. print(y)

    image.png

  • 把字符串编码成 UTF-8 标准的字节数据,就不能用这个技巧来反转了

    1. w = '寿司'
    2. x = w.encode('utf-8')
    3. y = x[::-1]
    4. z = y.decode('utf-8')
    5. print(z)

    image.png

    晦涩难懂,不建议

    1. x = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
    2. x[2::2] # ['c', 'e', 'g']
    3. x[-2::-2] # ['g', 'e', 'c', 'a']
    4. x[-2:2:-2] # ['g', 'e']
    5. x[2:2:-2] # []