[PY3]——內建資料結構(9)——線性結構與切片/命名切片slice()

Jelly_lyj發表於2017-03-18

線性結構的總結

列表list  元組tuple  字串str  bytes  bytearray的共同點:

  • 都是順序儲存、順序訪問的;
  • 都是可迭代物件;
  • 都可以通過索引訪問

線性結構的特徵:

  • 可迭代
  • 可通過len獲取長度
  • 可以使用下標操作符通過索引訪問
  • 可以切片

補充三個函式:

  • enumerate() 同時獲取index和value
  • next()獲取一個迭代器的下一個值
  • iter()把一個可迭代物件轉化成一個迭代器


切片操作[start:stop]

# 注意:以下幾條規則的優先順序,是按照順序依次排序的

In [12]: lst=list(range(10)) In [13]: lst Out[13]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 訪問lst的一段,從start開始到stop結束,但不包含stop In [14]: lst[3:7] Out[14]: [3, 4, 5, 6] # 當start省略時表示從頭開始,當stop省略時表示直到末尾 In [15]: lst[:7] Out[15]: [0, 1, 2, 3, 4, 5, 6] In [16]: lst[3:] Out[16]: [3, 4, 5, 6, 7, 8, 9] In [17]: lst[:] Out[17]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 支援負數索引,負數索引實際上可以轉化為 len(lst)+index In [18]: lst[-5:-3] //[10+(-5)=5,10+(-3)=7] Out[18]: [5, 6] In [25]: lst[3:-1] //[3,10+(-1)=9] Out[25]: [3, 4, 5, 6, 7, 8] # 當start>=stop時,返回空列表 In [21]: lst[100:] //100>-1 Out[21]: [] In [22]: lst[:-100] //0>10+(-100) Out[22]: [] In [23]: lst[3:1] //3>1 Out[23]: [] In [24]: lst[3:3] //3=3 Out[24]: [] # 當start超出索引範圍start=0,當stop超出索引範圍stop=-0 In [19]: lst[-100:] Out[19]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] In [20]: lst[-100:100] Out[20]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

[start:stop:step]

In [27]: lst[::2]
Out[27]: [0, 2, 4, 6, 8]

In [28]: lst[::-2]
Out[28]: [9, 7, 5, 3, 1]

In [30]: lst[::-1]
Out[30]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

In [35]: lst[10:1:-2]
Out[35]: [9, 7, 5, 3]

In [36]: lst[10:1:2]
Out[36]: []

 

命名切片slice( )

items=[0,1,2,3,4,5,6]
a=slice(2,4)
print(a.start,a.stop,a.step)  #切片的start、stop、step三元組slice()中都可以指定
   2 4 None
print(a)
   slice(2, 4, None)

#使用已命名的a,可以做什麼?
print(items[a])  #等價於print(items[2:4])
    [2, 3]
items[a]
=[10,11];print(items) [0, 1, 10, 11, 4, 5, 6]
del items[a];print(items) [0, 1, 4, 5, 6]

 

相關文章