索引和切片


索引和切片

索引(下標)

索引又稱下標,用來表示可迭代對象中的某個元素的位置。

  • 用正整數表示的索引值,從左向右定位,從 0 開始計數,如 0,1,2
  • 用負整數表示的索引值,從右向左定位,從 -1 開始計數,如 -1,-2,-3

例如:

name = "meet" # 計算機從0開始數
		#0123 (索引值|下標值) 從左向右
		#-4-3-2-1           從右向左

print(name[2])   # 通過索引准確定位內容
print(name[-4])  # 通過索引准確定位內容

輸出的結果為:

e
m

切片

有這樣一個字符串:meet_alex_wusir,我們想要把其中的 alex 取出來,該怎么做呢?一個可行的方法是,分別用 alex 的索引值,把它們分別取出來,再利用字符串的 加和 操作把它們拼接起來,就像這樣:

name = "meet_alex_wusir"
a = name[5] # 取出a
b = name[6] # 取出l
c = name[7] # 取出e
d = name[8] # 取出x
print(a + b + c + d) # 拼接並打印字符串

當然也可以通過循環的方法來取出相應的字符,然后拼接成新的字符串:

name = "meet_alex_wusir"
i = 5
s = ''
while i <= 8:
    s += name[i]
    i += 1
print(s)

因為這樣的循環在 Python 中非常常用,所以被封裝成為了一種簡便的方法,就是字符串的 切片。切片的基本格式和使用方法如下:

name = "meet_alex_wusir"
      # 0123456789
print(name[5:9])  # [起始位置:終止位置]  顧頭不顧腚(起始位置保留,終止位置不保留)
print(name[-5:])  # [起始位置:終止位置(默認到結尾)]  顧頭不顧腚
print(name[:])  # [起始位置(默認從開頭):終止位置(默認到結尾)]  顧頭不顧腚


輸出的結果為:

alex
wusir
meet_alex_wusir

關於切片的終止位置的選擇,還有一個技巧是:終止位置 = 起始位置 + 切片長度。例如上面的例子中,起始位置為 5,切片長度為 4,終止位置為 5 + 4 = 9

有的時候我們並不想要一個一個取字符,而是要隔一個字符取一個。比如對於上面 "meet_alex_wusir" 的例子,我們想要取第 357 位的 e_l,該如何操作呢?

我們依舊可以使用最原始的,分別取值,然后拼接字符串的方法:

name = "meet_alex_wusir"
a = name[2]
b = name[4]
c = name[6]
print(a + b + c)

這種方法確實能得到我們想要的結果,但是太過繁瑣。如果我們想要處理很長的字符串,就會非常麻煩了。這就需要我們在切片時引入 步長 變量。步長 是使用切片方法的第三個參數,默認值為 1。對於上面的例子,我們可以設置 步長2

name = "meet_alex_wusir"
       #0123456789
       #-6-5-4-3-2-1
print(name[2:7:2])  #[起始位置:終止位置:步長(默認為1)]

如果我們把步長設置成 -1,可以實現從右向左查找:

name = "meet_alex_wusir"
print(name[-1:3:-1])  # 步長可以控制查找方向

輸出的結果為:

risuw_xela_

在進行索引操作時,如果輸入的參數超過最大索引值時,程序會報錯。而在進行切片操作時,如果終止位置超出最大索引值時,程序不會報錯,而是會走到字符串的結尾:

name = "meet_alex_wusir"
print(name[2:20:2])

輸出的結果為:

e_lxwsr

需要注意的是,索引和切片只能給有序數據(字符串、列表、元組)使用。整型和布爾值等均不可以用來進行索引和切片操作。

同整型一樣,字符串也是一個不可變的數據類型:

name = "meet"
print(id(name)) # 2388909933712
name = name + "最帥了"
print(id(name)) # 2388910157296

在 Python 中,對於字符串的賦值,還會有這樣一個有趣的情況:

name = "meet"
name1 = "meet"
print(id(name)) # 2313349022864
print(id(name1)) # 2313349022864

明明是兩次賦值,兩個字符串的內存地址居然是相同的。這是因為 Python 中有一個小數據池,小數據會駐留。在小數據駐留期間對相同的數據有新的賦值操作,不會新開辟一個內存空間,而是將變量指向已有數據的內存地址。小數據池機制是為了節省內存空間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM