一、索引和切片介紹
字符串可以定義為字符的有序集合,我們可以通過其位置獲得他們的元素。在python中,字符串中的字符是通過索引提取的。
- python偏移量是從0開始的,這樣就會比字符串的長度len()小1。
- 大家比較熟悉字符串的正偏移,python中還可以使用負偏移,可以看著是從結(jié)束處反向計數(shù)。
- 關(guān)于偏移和分片的網(wǎng)格四意圖如圖,便于理解:

image.png
個人覺得這個圖解比較好,大部分人的圖解都是直接把偏移量0直接指向了第一個元素。
二、代碼舉例講解
舉例1:索引(S[i])獲取特定偏移的元素
S = 'abcdefg'
print(S[0],S[-1])
#('a', 'g')
- 第一個元素的偏移量是0
- 負偏移索引意味著從最后或者右邊反向進行計數(shù)
- S[0]獲取了第一個元素
- S[-1]獲取了倒數(shù)第一個元素,效果等同于S[len(S)-1]
舉例2:分片(S[i:j])提取對應(yīng)的步伐作為一個序列
S = 'abcdefg'
print(S[1:3])
#'bc'
print(S[1:])
#'bcdefg'
print(S[:-1])
#'abcdef'
- 上邊界并不包含在內(nèi)
- 分片的邊界默認為0和序列的長度,如果沒有特別給出的話
- S[1:3]獲取了從偏移為1的元素,到但是不包含偏移為3的元素
- S[1:]或者了從偏移1直到末尾直接的元素
- S[:3]獲取了從偏移0直到但是不包括3之間的元素=S[0:3]
- S[:-1]獲取了從偏移量0直到但是不包含最后一個元素之間的
- S[:]獲取了所有的元素,可以實現(xiàn)頂層S的拷貝
三、擴展分片:第三個限制值S[I:J:K]
直接代碼舉例進行說明
print(S[1:5:2])
# 'bd'
print(S[::2])
# 'aceg'
print(S[::-1])
# 'gfedcba'
print(S[5:1:-1])
# 'fedc'
- S[I:J:K]代表“偏移從X到J-1,每隔K元素索引一次”
- 第三個限制K,默認為1
- S[1:5:2]取偏移1到4之間的元素,間隔1個元素的元素,也就是偏移1、3之處的元素
- S[::2]從序列頭取到尾,每隔一個元素的元素
- 也可以用負數(shù)作為步進,步進-1代表從右向左進行。
- S[::-1]實際效果就是將序列進行反轉(zhuǎn)(這是一個有用的技巧)
- S[5:1:-1]反轉(zhuǎn)的順序獲取2到5的元素(偏移5、4、3、2的元素)