Python中的[::-1]

这个是python的slice notation的特殊用法。

  • b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象
  • 当i缺省时,默认为0,即 a[:3]相当于 a[0:3]
  • 当j缺省时,默认为len(alist), 即a[1:]相当于a[1:10]
  • 当i,j都缺省时,a[:]就相当于完整复制一份a了

b = a[i:j:s]这种格式呢,i,j与上面的一样,但s表示步进,缺省为1.

所以a[i:j:1]相当于a[i:j]

当s<0时:i缺省时,默认为-1; j缺省时,默认为-len(a)-1

所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍。

a = ['a','b','c','d','e','f','g','h','g','k','l','m']
b = a[:]  # 列表切片,表示把列表a[]的值全部正序复制到列表b[]中
print(b)  # ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'g', 'k', 'l', 'm']
# b = a[n:m]表示列表切片,复制列表a[n]到a[m-1]的内容到新的列表对象b[]
# 当n缺省时,默认为0,即a[:m]
# 当m缺省时,默认到最后,即a[n:]
b1 = a[1:4]
print(b1)  # ['b', 'c', 'd']
b2 = a[:3]
print(b2)  # ['a', 'b', 'c']
b3 = a[1:]
print(b3)  # ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'g', 'k', 'l', 'm']
# b = a[i:j:s]这种格式呢,i,j与上面的一样,但s表示步进,缺省为1,s可以取任何数字.
# 所以a[i:j:1]相当于a[i:j]
b4 = a[1:5:2]
print(b4)  # ['b', 'd']
b5 = a[:5:-1]  # 从末尾倒数取值
print(b5)  # ['m', 'l', 'k', 'g', 'h', 'g']
b6 = a[5::-2]
print(b6)  # 从a[n]处倒数取值
b7 = a[::-1]  # 到这取值
print(b7)  # ['m', 'l', 'k', 'g', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']