前言
面 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]