功能:截取串列中的任何部分,
切片適用于串列、元組、字串、range物件等型別,,
格式:[::]切片使用兩個冒號分隔的3個數字來完成,
第一個數字表示切片開始位置(默認為0),
第二個數字表示切片截止(但不包含)位置(默認為串列長度),
第三個數字表示切片的步長(默認為1),當步長省略是可省略最后一個冒號,
1.切片操作不會因為下標越界而拋出例外,而是簡單地在串列尾部截斷或者回傳一個空串列,
>>> alist=[1,2,3,4,5,6,7,8,9,0,]
>>> alist[::] #回傳包含元素的新串列
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> alist[::-1] #逆序的所有元素
[0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> alist[::2] #偶數位置,隔一個取一個
[1, 3, 5, 7, 9]
>>> alist[1::2] #奇數位置,隔一個取一個
[2, 4, 6, 8, 0]
>>> alist[3::] #從下標3開始的所有元素
[4, 5, 6, 7, 8, 9, 0]
>>> alist[3:6] #下標在[3,6]之間的所有元素
[4, 5, 6]
>>> alist[0:100:1] #前100個元素,自動截斷
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> a[100:] #下標100之后的所有元素,自動截斷
[]
>>> x[100] #直接使用下標訪問會發生越界
Traceback (most recent call last):
File "<pyshell#131>", line 1, in <module>
x[100]
IndexError: list index out of range
2.可以使用切片來原地修改串列內容
>>> alist
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> alist[len(alist):]=[9] #在尾部追加元素
>>> alist
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9]>>> alist[:3]=[3,2,1] #替換前三個元素
>>> alist
[3, 2, 1, 4, 5, 6, 7, 8, 9, 0, 9]
>>> alist[:3]=[] #洗掉前三個元素
>>> alist
[4, 5, 6, 7, 8, 9, 0, 9]
>>> alist=list(range(10))
>>> alist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[::2]=[0]*5 #替換偶數位置上的元素
>>> alist
[0, 1, 0, 3, 0, 5, 0, 7, 0, 9]
>>> alilst[::2]=[0]*3 #切片不連續,兩個元素個數必須一樣多
Traceback (most recent call last):
File "<pyshell#153>", line 1, in <module>
alilst[::2]=[0]*3
NameError: name 'alilst' is not defined
3.使用del與切片結合來洗掉串列元素
>>> alist=[3,4,5,6,7,] >>> del alist[:3] #洗掉前三個元素 >>> alist [6, 7] >>> alist=[3,4,5,6,7] >>> del alist[::2] #洗掉偶數位置上的元素 >>> alist [4, 6]
4.切片回傳的是串列元素的淺復制
>>> alist=[3,5,7] >>> blist=alist >>> blist [3, 5, 7] >>> blist[1]= 8 >>> alist [3, 8, 7] >>> alist==blist True >>> alist is blist True >>> id(alist) 2848177707136 >>> id(blist) 2848177707136
5.淺復制是把原串列中所有元素的參考都復制都信串列中
原串列中只包含整數、實數、復數等基本型別或元組、字串這樣的不可變型別的資料,一般是沒有問題的,
原串列中包含串列之類的可變資料型別,由于淺復制是只是把子串列的參考復制到新串列中,修改任何一個都會影響另外一個,
>>> alist=[1,2,3]
>>> blist=alist[::] #切片,淺復制
>>> alist==blist #兩個串列的元素完全一樣
True
>>> alist is blist #但不是同一個物件
False
>>> id(alist)==id(blist) #記憶體地址不一樣
False
>>> blist[1]=8 #修改一個不會影響另一個
>>> blist
[1, 8, 3]
>>> alist
[1, 2, 3]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/167822.html
標籤:Python
