字元串的索引分為兩種,正向和逆向,可以分别通過兩種索引擷取指定位置字元
# 定義字元串并擷取長度
num_str = "0123456789"
len_int = len(num_str)
# 字元串每個字元的索引有兩種:正下标(0開始),負下标(-1開始)
# 正向[0,len_int-1],反向[-len_int,-1],下标範圍為-len_int到len_int-1
# 長度為10的字元串,正向[0,9],反向[-10,-1],下表範圍[-10,9],
# 首位的下标正向時為0,逆向時為-len_int
print(num_str[0])
print(num_str[-len_int])
# 索引低于-len_int報錯
# print(num_str[-len_int - 1])
print()
# 末尾的下标正向時為len_int-1,逆向時為-1
print(num_str[len_int - 1])
print(num_str[-1])
# 索引高于len-1報錯
# print(num_str[len_int])
print()
輸出結果:
9
9
切片中的步長會影響切片的方向,步長為負時,切片會從後往前截取
代碼如下:
# 切片的格式為[i:j:s]
# s預設值為1
# 當s=0,報錯
# print(num_str[::0])
# 當s>0(包括預設值1),表示正向切片
# i預設值為0,即 num_str[:3]相當于num_str[0:3]
# j預設值為len(num_str), 即num_str[1:]相當于num_str[1:10]
# 當i,j都預設時,[:]就相當于完整複制一份num_str了
# 兩邊預設
print(num_str[:])
# 右邊預設
print(num_str[0:])
print(num_str[-len_int:])
# 左邊預設
print(num_str[:len_int])
print()
# 當s<0,表示反向切片
# i預設值為-1,即 num_str[:3,-1]相當于num_str[-1:3,-1]
# j預設值為-len(num_str)-1, 即num_str[1::-1]相當于num_str[1:-11:-1]
# 當i,j都預設時,[::-1]就相當于反轉字元串了
# 兩邊預設
print(num_str[::-1])
# 右邊預設
print(num_str[-1::-1])
print(num_str[len_int-1::-1])
# 左邊預設
print(num_str[:-len_int-1:-1])
print()
輸出結果:
0123456789
0123456789
0123456789
0123456789
9876543210
9876543210
9876543210
9876543210
正向切片時,起始和末尾的相對位置與字元實際所在位置一緻
反向切片時,起始和末尾的相對位置與字元實際位置正好相反
代碼如下:
# 結論:
# 1.i和j隻是辨別起始位和末位,沒有大小之分(可正可負)
# 2.s代表切片的方向,
# s>0表示正向,字元串num_str[i]在num_str[j]之前,否則最多隻能截取到正向末尾字元(9)
# s<0表示逆向,字元串num_str[i]在num_str[j]之後,否則最多隻能截取到逆向末尾字元(0)
print(num_str[len_int-1:])
print(num_str[-1:])
print(num_str[5:5])
print(num_str[5:4])
print()
print(num_str[-len_int::-1])
print(num_str[0::-1])
print(num_str[5:5:-1])
print(num_str[5:6:-1])
print()
輸出結果:
9
9
0
0