python序列(五)切片操作


  功能:截取列表中的任何部分。

  切片適用於列表、元組、字符串、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]


免責聲明!

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



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