Python 列表切片


想必很多人都使用過列表的切片,通過切片可以從列表中獲取一個或多個元素,但你真的了解切片?

一、一般玩法

>>> 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)          
2004289344072      

深拷貝

>>> B = name   
>>> id(B)          
2004289245384  

>>> id(name)       
2004289245384 

原理透析

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、輸出值

A = 'apple'
B = A
B = 'banana'
print(A)

A 為字符串,是不可變類型,因此 A 的值始終不變,為:'apple'

3、輸出值

A = ['apple']
B = A
B[0] = 'banana'
print(A)

= 是深拷貝,兩者 ID 也相同,修改 B 會影響 A,修改 A 會影響 B,所以結果為: ['banana']

4、輸出值

A = ['apple']
B = A[:]
B[0] = 'banana'
print(A)

[:] 是淺拷貝,只拷貝了第一層,修改不會有影響,所以結果為:['apple']


免責聲明!

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



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