1、線性結構python
list、tuple、str、bytes、bytearray,range()express
都是順序存儲、順序訪問的、都是可迭代對象、均可以經過索引訪問;被稱爲線性結構
bash
可以使用len()獲取長度、能夠切片,可使用iter()將可迭代對象轉換爲迭代器ide
In [16]: r = range(8) In [17]: r Out[17]: range(0, 8) In [18]: i = iter(range(8)) In [19]: i Out[19]: <range_iterator at 0x7f2417b7e5d0> In [20]: next(i) Out[20]: 0 In [21]: next(i) Out[21]: 1 In [23]: len(r) Out[23]: 8 In [24]: l = ["a", 0, 1] In [25]: i = iter(l) In [26]: type(i) Out[26]: list_iterator In [27]: next(i) Out[27]: 'a' In [28]: next(i) Out[28]: 0 In [29]: next(i) Out[29]: 1 In [30]: next(i) --------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-30-bed2471d02c1> in <module>() ----> 1 next(i) StopIteration:
可迭代對象均可以用len獲取長度,使用iter()轉化成迭代器(iterator)
spa
2、切片操做對象
經過索引獲取獲取某個片斷的值索引
格式:ip
list[start:stop:step] # 包含start不包含stop;返回一個新的list,不會對原list修改
get
In [1]: lst = list(range(5)) In [2]: lst Out[2]: [0, 1, 2, 3, 4] In [3]: lst[3] Out[3]: 3 In [4]: lst[3:4] Out[4]: [3] In [6]: lst[1:5] Out[6]: [1, 2, 3, 4] In [7]: lst[1:5:2] Out[7]: [1, 3] In [8]: lst[1:5:6] Out[8]: [1] In [9]: lst[1:5:4] Out[9]: [1] In [10]: lst[1:5:3] Out[10]: [1, 4] In [11]: lst[1:5:-2] Out[11]: [] In [14]: lst[:] Out[14]: [0, 1, 2, 3, 4] In [15]: lst[:3] Out[15]: [0, 1, 2] In [16]: lst[3:] Out[16]: [3, 4] In [17]: lst[::] # star,stop,step均可以省略;默認爲0,-0,1 Out[17]: [0, 1, 2, 3, 4] In [18]: lst[::2] Out[18]: [0, 2, 4] In [19]: lst[::-2] # 這時step可使用負數 Out[19]: [4, 2, 0] In [20]: lst[::-1] Out[20]: [4, 3, 2, 1, 0] In [21]: lst[1:5:-1] Out[21]: [] In [22]: lst[:5:-1] Out[22]: [] In [23]: lst[0::-1] Out[23]: [0]
當start >= stop時,step爲正時,返回空List;當step爲負數時,反向
input
In [34]: lst[2:-1] # -1索引實際上等於len(list) + index,仍是大於stop Out[34]: [2, 3] In [38]: lst[1:5] Out[38]: [1, 2, 3, 4] In [39]: lst[1:5:-2] Out[39]: [] In [40]: lst[5:1:-2] Out[40]: [4, 2]
3、解構與封裝
一、解構
解構:按照元素順序,把線性結構的元素複製給變量
In [69]: x = 1 In [70]: y = 2 In [71]: x, y Out[71]: (1, 2) In [72]: tmp = x In [73]: x = y In [74]: y = tmp In [75]: x, y Out[75]: (2, 1) # 解構 In [76]: x = 1 In [77]: y = 2 In [78]: x, y = y, x In [79]: x, y Out[79]: (2, 1) In [90]: lst = [1, 2] In [91]: first, second = lst In [92]: first, second Out[92]: (1, 2)
二、封裝
定義一個tuple,能夠省略括號;封裝出來的必定是tuple
In [95]: t = 1, 2 In [96]: type(t) Out[96]: tuple
三、結構的變化
python3新增的特性
In [97]: lst = list(range(5)) In [98]: lst Out[98]: [0, 1, 2, 3, 4] In [99]: head, *mid, tail = lst In [100]: head Out[100]: 0 In [101]: tail Out[101]: 4 In [102]: mid Out[102]: [1, 2, 3] ## 加*號表示剩下的全部元素 In [103]: head, mid, *tail = lst In [104]: head Out[104]: 0 In [105]: mid Out[105]: 1 In [106]: tail Out[106]: [2, 3, 4] In [108]: *head, mid, tail = lst In [109]: head Out[109]: [0, 1, 2] In [110]: mid Out[110]: 3 In [111]: tail Out[111]: 4 In [112]: *head = lst File "<ipython-input-112-d93bf1bcef99>", line 1 *head = lst ^ SyntaxError: starred assignment target must be in a list or tuple In [113]: head, *m1, *m2, tail = lst File "<ipython-input-113-1fc1a52caa8e>", line 1 head, *m1, *m2, tail = lst ^ SyntaxError: two starred expressions in assignment In [114]: *m1, *m2, tail = lst File "<ipython-input-114-ed48e48df1b1>", line 1 *m1, *m2, tail = lst ^ SyntaxError: two starred expressions in assignment
總結:
元素按照順序賦值給變量
變量和元素必須匹配
加星號的變量,能夠接受任意個數元素,無論右邊是什麼type返回的都是一個list,能夠是[]
加型號的變量不能單獨出現
In [115]: lst = [0, 1, 2, 3] In [116]: v1, v2, v3, v4, v5 = lst --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-116-489c26003cc5> in <module>() ----> 1 v1, v2, v3, v4, v5 = lst ValueError: not enough values to unpack (expected 5, got 4) In [117]: v1, v2, v3, v4 = lst In [118]: v1,v2,v3,v4 Out[118]: (0, 1, 2, 3) In [119]: v1,v2,v3,*v4= lst In [120]: v1,v2,v3,v4 Out[120]: (0, 1, 2, [3]) In [121]: v1,v2,v3,v4,*v5 = lst In [122]: v1,v2,v3,v4,v5 Out[122]: (0, 1, 2, 3, [])
常見用法:
In [130]: head, *_, tail = lst ## python中慣常使用單個下劃線_表示丟棄該變量, ## 單個下劃線也是Python中合法的標識符,可是若是不是要丟棄一個變量,一般不要用單個下劃線表示一個變量 In [131]: head Out[131]: 0 In [132]: tail Out[132]: 3 In [133]: _ Out[133]: [1, 2] ## 多層級解構 In [14]: lst = [1, (2, 3), 5] In [15]: _, (_, var), _ = lst In [16]: var Out[16]: 3 In [17]: _ Out[17]: 5
沒有解構,也能夠活,但有了解構能夠活的很美好
解構這個特性,被不少語言借鑑,如(ES6)