Python内置数据结构--列表
生活随笔
收集整理的這篇文章主要介紹了
Python内置数据结构--列表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本節內容:
- 列表
- 元組
- 字符串
- 集合
- 字典
本節先介紹列表。
?
一、列表
一種容器類型。列表可以包含任何種類的對象,比如說數字、子串、嵌套其他列表、嵌套元組。 任意對象的有序集合,通過索引訪問其中的元素。其長度可變,支持異構(在一個列表中可以包含多種不同類型的元素),可以任意嵌套。 列表是可變對象,支持在原處修改。列表的可變變現在其內部的每一個元素存儲在列表中不是對象本身,而是對象的引用。因此其修改的是對象的引用。help()是ipython里特有的函數,可以打印出類、函數的一些信息。
In [1]: help(list)Help on class list in module builtins:class list(object)| list() -> new empty list| list(iterable) -> new list initialized from iterable's items| | Methods defined here:| | __add__(self, value, /)| Return self+value.| | __contains__(self, key, /)| Return key in self.| | __delitem__(self, key, /)| Delete self[key].| | __eq__(self, value, /)| Return self==value.| | __ge__(self, value, /)| Return self>=value.| | __getattribute__(self, name, /)| Return getattr(self, name).| | __getitem__(...)| x.__getitem__(y) <==> x[y]| | __gt__(self, value, /)| Return self>value.| | __iadd__(self, value, /)| Implement self+=value.| ...
1.?初始化列表
list(),里面可以什么都不放,也可以放可迭代對象。 直接一個[] In [2]: lst = list()In [3]: lst = []In [4]: lst Out[4]: []In [5]: lst = [1, 2, 3]In [6]: lst Out[6]: [1, 2, 3]
2. 下標/索引操作
python中list的索引從0開始。絕大多數語言的下標是從0開始的,也有少部分例外,比如awk、lua。 負數的索引表示從后往前數,由-1開始,-1表示最后一個元素。 In [6]: lst Out[6]: [1, 2, 3]In [7]: lst[0] Out[7]: 1In [8]: lst[-1] Out[8]: 3 如果索引超出范圍,將引發IndexError。 In [9]: lst[-4] --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-9-7ea420056b9a> in <module>() ----> 1 lst[-4]IndexError: list index out of rangeIn [10]: lst[3] --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-10-298ffefac8cf> in <module>() ----> 1 lst[3]IndexError: list index out of range修改元素的時候,如果超出索引范圍,也會引發IndexError。
?
?
3. 列表的操作
- 增:append、extend、insert
- 刪:clear、pop、remove
- 改:reverse、sort
- 查:count、index
- 其他:copy
?
(1)給list增加元素append:
append方法原地修改list,給list最后增加一個元素。append方法的返回值是None。?
insert:
insert方法操作的索引超出范圍時,如果是正索引,等效于append,如果是負索引,等效于insert(0, object) insert的時間復雜度是O(n),append的時間復雜度是O(1)。因為insert是要做一個遍歷的。extend:
extend的時間復雜度是O(n),這個n是可迭代對象的長度,并不是原有list的長度n。(2)刪除元素
pop:
可以傳入index,默認從最后移除一個元素,并且把這個元素返回回來。 index默認是-1,即最后一個元素,如果index超出索引范圍,會拋出IndexError。?
remove:
pop是彈出索引對應的值,remove是刪除最左邊的一個值。 pop針對的是索引,remove針對的是值。 remove的時候,如果值不存在,會拋出ValueError。?
pop和remove的時間復雜度都是O(n)?
clear:
clear方法刪除列表的所有元素。 (4)查找/統計元素 可以利用index查詢?
index:?
start包含,stop不包含。即[start, stop) index方法根據值查找索引。?
count: count返回指定的value在List中出現的次數。len函數
不是List的方法,它是python的一個內置函數,用于檢查List元素個數。并不僅僅是針對List,可以針對很多對象。?
(5)修改列表sort:
原處是指直接修改List?
reverse: 原處是指直接修改List?
(6)其他方法?copy:
?
如何刪除后面的2? 如果不想在原List上做修改: lst2 = lst,只是一個指針指到lst指到的那塊內存,因此操作lst2的時候,lst也被修改了。因為它們兩個都是指針,指到同一塊內存。這就用到List的copy函數了。 搞錯了,不是深copy,只是一層copy。?
id()打印出引用指向的內存塊的地址。?
成員關系判斷- in
- not in
?
【舉例】:如何去除List中的重復元素?
列表相加:合并兩個列表,生成了一個新列表。不會修改原列表。這個和子串的相加是一樣的,生成新的子串。?
序列相乘:就是重復元素多次。都是生成新對象。 子串乘法: 列表乘法:?
?
4. 切片
切片通常是用來訪問數據的,如果你對切片賦值的話,產生的結果是不可預料的。切片操作總是返回一個新的list,不會改變原有的list?
?
seq[start, end] [start, end)如果想獲取到最后一個元素,省略end
?
?
以上都是從左往右切片,所以左邊的數字要小于右邊的數字。 start超出索引范圍從0開始,end超出索引范圍到到len(lst)結束。?
?
start為0時可以省略,end省略表示打印到最后一個元素,start和end都省略就是copy。?
切片還有一個第3個參數:step,默認是1?
當step為負數的時候,從后往前數,此時start應該大于end,否則返回空列表。?
?
?
?
切片賦值 對切片賦值,會替換切片原來的元素。?
通常我們是不會對切片進行賦值的,會造成很多的誤解。5.?解包/封包
看一個例子,傳統的swap 但是在python里面不需要這么做?
原來中間的3行代碼變成了現在的1行代碼,這就是解包/封包。 最簡單的解包就是如下:把右邊的元組或者列表(可迭代對象都行)解開成了左邊的兩個變量,這種就是解包。?
封包就是把一組變量,變成元組。把若干變量或常量封裝到一個變量里,這就是封包。 我們顯式的使用封包比較少,但是解包用的很多。?
應用場景:?
?
?
?
解包是把集合里的元素賦值給變量(集合可以是可迭代對象),賦值完的變量要么是一個值,要么是個list,而不管右側集合是列表還是元組。 封包是把變量構建成元組。下面的這種用法python2是不支持的。?
比如我想取出list中的下標是0,1,3元素,切片是不好做的:?
下劃線_ 是指當我們要丟棄一個變量時使用的。 再如,我們取一頭一尾:?
?
再看兩個復雜點的: 只要兩邊結構是一樣的,解包多少層都是可以的。?
?
?
?
轉載于:https://www.cnblogs.com/zhaojiankai/p/8954539.html
總結
以上是生活随笔為你收集整理的Python内置数据结构--列表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker 配置固定IP及桥接的实现方
- 下一篇: Python 编码问题:‘ascii‘