想必很多人都使用過列表的切片,通過切片可以從列表中獲取乙個或多個元素,但你真的了解切片?
一、一般玩法
>>> name = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> name[0:2]# 獲取 0 - 2 中間的元素,不包括索引為 2 的元素
['a', 'b']
>>> name[:2]# 從 0 開始切,可省略 0
['a', 'b']
>>> name[1:]# 同樣地,切到最後乙個也可以省略最後的元素索引
['b', 'c', 'd', 'e', 'f', 'g', 'h']
二、列表步長
列表切片實際上還可以接收第三個引數:步長(預設情況為 1),來試試將其改為 2 會有說明變化?
>>> name[1:6:2]# 每隔 2 個元素才取出乙個來
['b', 'd', 'f']
>>> name[::2]# 如果是從頭到尾切,還可以寫成這樣
['a', 'c', 'e', 'g']
>>> name[::-1]# 同樣地,步長還可以是負數,當步長為 -1 時,相當於複製乙個反轉的列表
['h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']
>>> name[::-2]
['h', 'f', 'd', 'b']
容易出錯的地方:
>>> name[7:2:-2]# 相當於從索引為 7 到 索引為 2 中,每隔 2 各元素取乙個出來
['h', 'f', 'd']
>>> name[10:2:-2]# 對於超出索引的,預設是從最後乙個元素開始取
['h', 'f', 'd']
>>> name[100:2:-2]
['h', 'f', 'd']
三、列表深淺拷貝
淺》 a = name[:]
>>> id(a)
深》 b = name
>>> id(b)
>>> id(name)
原理透析
python 的變數就像乙個 標籤,或者說是乙個名字,它通過指標指向元素值,可以理解為下圖所示:
深拷貝指向原來的值,兩者 id一致,淺拷貝是從原來的值上覆制乙個副本出來。
四、面試題
1、列表 l = [1, 2, 3, 4, 5, 6, 7, 8, 9],那麼 print(l[10:3:-2]) 為多少?
>>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(l[10:3:-2])
[9, 7, 5]
2、輸出值
b = a
b = 'banana'
print(a)
3、輸出值
b = a
b[0] = 'banana'
print(a)
= 是深拷貝,兩者 id 也相同,修改 b 會影響 a,修改 a 會影響 b,所以結果為: ['banana']
4、輸出值
b = a[:]
b[0] = 'banana'
print(a)
python 切片 關於Python切片問題!
在數學中,序列也被稱為數列,是指按照一定順序排序的一列數。在python中序列是最基本的資料結構。它是用於一塊用於存放多個值的連續記憶體空間。python內建了5個常用的序列結構。分別是列表 元組 字典 集合和字串。今天就來看一下這些序列結構的基本操作。序列的每乙個元素都有乙個編號,也被稱為索引,這...
python正向切片 python之切片
切片可以切字串str 列表list 元組tuple,以列表為例 1 使用索引獲取列表中某個元素 0 1 2 3 list a b c d 4 3 2 1 print list 0 list 4 list 0 list 4 的值均為 a list 0 為正向索引,list 4 為負向索引 2 列表中的...
python 切片步長 python 切片步長
python切片 切片 list變數 值下標 結束值下標 什麼意思呢?就是獲取 list中 下標從定義的位置開始獲取資料到 自定義的下標位置結束,但是切片有個規矩就是顧頭不顧尾,舉個例子 kl oppo vivo iphone levovo print kl 0 1 結果 oppo 如果我取list...