Python 高級特性(1)- 切片


前言

面 tx 被問到 python 的高級特性相關,這里做個補充學習吧

 

正向范圍取值

關鍵點

  • 首位下標是 0
  • 第一個數字是起始下標,第二個數字是結束下標(但最終結果不包含它)

 

代碼塊一

# 正向范圍取值 - 字符串
strs ="https://www.cnblogs.com/poloyy"

# 從第 0 個下標開始取值,到第 1 個下標結束,但不會取第 1 個下標的元素,最終取的是 0 下標的值
print(strs[0:1])

# 從第 0 個下標開始取值,到第 10 個下標結束,但不會取第 10 個下標的元素,最終取的是 1,2,3,4,5,6,7,8,9 下標的值
print(strs[0:10])

# 從第 5 個下標開始取值,到第 10 個下標結束,但不會取第 10 個下標的元素,最終取的是 5,6,7,8,9 下標的值
print(strs[5:10])

# 從第 5 個下標開始取值,到第 100 個下標結束,但因為字符串最長就 30 個字符,所以會取到最后一個結束就結束了
print(strs[5:100])

# 相同數字返回空
print(strs[5:5])

# 第二個數字比第一個數字小,返回空
print(strs[5:4])

# 從第 0 個下班開始取值,取后面所有元素
print(strs[0:])

# 取前面 10 個元素
print(strs[:10])

 

運行結果

h
https://ww
://ww
://www.cnblogs.com/poloyy


https://www.cnblogs.com/poloyy
https://ww

 

代碼塊二

# 正向范圍取值 - 數組
lists = [1, 2, 3, 4, 5, 6, 7]

print(lists[0:1])
print(lists[0:10])
print(lists[5:10])
print(lists[5:100])
print(lists[5:5])
print(lists[5:4])

 

運行結果

[1]
[1, 2, 3, 4, 5, 6, 7]
[6, 7]
[6, 7]
[]
[]

 

反向范圍取值

關鍵點

  • 因為是反向,所以倒數的下標從 -1 算起
  • 第一個數字是起始下標,第二個數字是結束下標(但最終結果不包含它)
  • 第一個數字是負數情況下,第二個數字最大是 -1,如果寫成 0 會返回空值

 

代碼塊

# 反向范圍取值 - 字符串
strs = "https://www.cnblogs.com/poloyy"

# 取最后 10 個元素
print(strs[-10:])

# 取最后 6-10 的元素, 不會取到倒數第五個元素
print(strs[-10:-5])

# 反向范圍取值 - 列表
lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 取最后 6 個元素
print(lists[-6:])

# 取最后 5 個元素, 但不會取到倒數第 1 個元素
print(lists[-5:-1])

# 第二個值寫0,返回空值
print(lists[-10:0])

# 正數+復數組合
print(lists[1:-5])

 

運行結果

com/poloyy
com/p
[5, 6, 7, 8, 9, 10]
[6, 7, 8, 9]
[]
[2, 3, 4, 5]

 

[:] 復制對象

代碼塊

# [:]
lists1 = [1, 2, 3, 4, 5]
lists2 = lists1
lists1.append(6)
print(lists1, lists2, id(lists1), id(lists2))

lists1 = [1, 2, 3, 4, 5]
lists2 = lists1[:]
lists1.append(6)
print(lists1, lists2, id(lists1), id(lists2))

lists1 = [1, 2, 3, 4, 5, [1, 2, 3]]
lists2 = lists1
lists1[5].append(4)
print(lists1, lists2, id(lists1), id(lists2))

lists1 = [1, 2, 3, 4, 5, [1, 2, 3]]
lists2 = lists1[:]
lists1[5].append(4)
print(lists1, lists2, id(lists1), id(lists2))

strs1 = "abcd"
strs2 = strs1
strs1 = "abc"
print(strs1, strs2, id(strs1), id(strs2))

strs1 = "abcd"
strs2 = strs1[:]
strs1 = "abc"
print(strs1, strs2, id(strs1), id(strs2))

 

運行結果

[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6] 2560550555144 2560550555144
[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5] 2560550627784 2560548023880
[1, 2, 3, 4, 5, [1, 2, 3, 4]] [1, 2, 3, 4, 5, [1, 2, 3, 4]] 2560550627400 2560550627400
[1, 2, 3, 4, 5, [1, 2, 3, 4]] [1, 2, 3, 4, 5, [1, 2, 3, 4]] 2560550627784 2560550627656
abc abcd 2560547930776 2560548937376
abc abcd 2560547930776 2560548937376

 

知識點

[:] 等同於淺拷貝,對可變對象是生效的

 

[::] 步進

代碼塊

# [::]
strs = "https://www.cnblogs.com/poloyy"

# 取最后 10 個元素,每 2 個取 1 個
print(strs[-10::2])

# 取第 0 到 10 的元素,每 5個 取 1 個
print(strs[0:10:5])

print(strs[::])
# 倒序
print(strs[::-1])

lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 取全部元素,每 3 個 取 1 個
print(lists[::3])
# 倒序
print(lists[::-1])

 

運行結果

cmply
h:
https://www.cnblogs.com/poloyy
yyolop/moc.sgolbnc.www//:sptth
[1, 4, 7, 10]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

 


免責聲明!

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



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