【Python】Python入门-列表初相识
公眾號:尤而小屋
作者:Peter
編輯:Peter
在之前的文章中,我們已經介紹了Python中的兩種常見數據類型:字符串和數字。本文中介紹的是Python中極其重要的數據類型:列表。
在Python中,列表用一個方括號[]表示;括號里面可以是數字,字符串,布爾值(True或者False),甚至還可以嵌套列表等不同的數據類型。列表是有序的數據類型。
思維導圖
列表定義
列表的定義有多種方式:
空列表
a?=?[]??#?定義一個空列表 a? [] type(a)??#?查看對象的類型 list單層列表
b?=?[1,2,3] b [1, 2, 3] type(b) list c?=?[1,2,"python"] c [1, 2, 'python'] type(c) list d?=?[True,True,False] d [True, True, False] type(d) list嵌套列表
e?=?[1,2,[3,4],"python"] e [1, 2, [3, 4], 'python'] type(e) list通過布爾函數bool來判斷一個對象是真還是假:
bool(a)??#?空列表 False bool(c)??#?非空列表 Truelist函數生成
list("1234") ['1',?'2',?'3',?'4']小結:從上面的多個例子,我們可以看到python列表中的數據類型是多樣的,從數字、字符串到布爾類型,再到嵌套的列表,都是裝的下的
操作
列表是Python的重要數據類型,其操作也是多樣化的。
基本操作
#?1、求長度b [1, 2, 3] len(b) 3 #?2、連接兩個列表b?+?c [1, 2, 3, 1, 2, 'python'] c?+?d [1, 2, 'python', True, True, False]相當于是將兩個列表的內容合并之后放在一個大列表中
#?3、成員判斷inf?=?["python","java","php","html"] f ['python', 'java', 'php', 'html'] "python"?in?f??#?python這個元素是否在列表f中,當然是在 True "html"?in?f True "go"?in?f??#?go不在列表f False #?4、列表重復c?*?3? [1, 2, 'python', 1, 2, 'python', 1, 2, 'python'] b?*?2 [1, 2, 3, 1, 2, 3] # 5、列表求最值:根據列表中元素的字典的長度來比較max(f)?? 'python'f列表中元素的第一個字母p是最大的。當第一個字母相同比較第二個字母,y大于h;比較的是兩個字母的ASCII碼大小。
f ['python', 'java', 'php', 'html'] max(b) 3 min(f) 'html'修改列表元素
之前講過的數據類型,字符串和數值型是不能修改的,但是列表卻是可以進行修改的,能夠實現增刪改的操作
f ['python', 'java', 'php', 'html'] len(f)??#?長度為4 4 f[1]? 'java' f[1]?=?"c++"??#?將索引為1的元素修改成c++ f ['python', 'c++', 'php', 'html']列表追加元素
往列表中追加元素使用的是append方法;追加到原列表的末尾
f.append("javascript")??#?自動追加到末尾 f ['python', 'c++', 'php', 'html', 'javascript']列表刪除元素
列表中還可以實現元素的刪除,使用的是del方法
del?f[1] f??#?c++被刪除了 ['python', 'php', 'html', 'javascript']列表常用函數
列表中有幾個常用的函數,需要我們掌握:
append:將整體追加到列表的末尾
extend:列表中的每個元素進行合并,組成一個大的列表
index:查看元素的索引
insert:指定位置插入元素
pop:刪除頂部的元素(彈出棧頂元素)
remove:刪除第一次出現的元素;元素不存在則會報錯
reverse:將列表中元素的順序顛倒過來;類比reversed
sort:列表元素的排序;類比sorted
append
往列表的末尾追加元素,返回沒有返回值;直接原地修改
f? ['python', 'php', 'html', 'javascript'] f.append("java")??#?追加到末尾 f ['python', 'php', 'html', 'javascript', 'java']extend
列表中每個元素的個體追加;原地修改,沒有返回值
print(c)?? print(f) [1, 2, 'python'] ['python', 'php', 'html', 'javascript', 'java'] c.extend(f) c??#?實現列表c的整體擴張 [1, 2, 'python', 'python', 'php', 'html', 'javascript', 'java'] c.extend("go")??? c [1, 2, 'python', 'python', 'php', 'html', 'javascript', 'java', 'g', 'o']如果上字符串元素,會自動的進行拆解之后再進行擴張追加
c.extend(["go"])??#?只追加列表的一個元素 c [1, 2, 'python', 'python', 'php', 'html', 'javascript', 'java', 'g', 'o', 'go'] c.extend(3)??#?數值型數據不能進行extend,因為它是不可迭代的(iterable) ---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-45-35eb2b66cb19> in <module> ----> 1 c.extend(3) # 數值型數據不能進行extend,因為它是不可迭代的(iterable)TypeError: 'int' object is not iterable如何查看Python中的數據類型是否可迭代?使用hasattr()方法:
hasattr(c,"__iter__")??#?列表可迭代 True hasattr("learn?python","__iter__")??#?字符串可迭代 True hasattr(3,"__iter__")??#?數值型數據不可迭代 False如何查看幫助文檔?使用help方法
help(list.extend) Help on method_descriptor:extend(self, iterable, /)Extend list by appending elements from the iterable. help(list.append) Help on method_descriptor:append(self, object, /)Append object to the end of the list.在上面的例子中我們發現extend和append執行之后,是沒有任何返回值的,它們是在原數據上直接添加的。
lst1?=?["python","java","go"] lst2?=?[1,2,3] id(lst1)??#?查看內存地址 4452149200 lst3?=?lst1.extend(lst2)print(lst3)??#?賦值的結果仍為None None lst1???#?其實lst1已經變化了 ['python', 'java', 'go', 1, 2, 3] id(lst1)??#?內存地址并沒改變 4452149200像這種修改數據之后,內存地址仍然沒有變化的操作,我們稱之為原地修改,不影響對象的內存地址
二者區別
append:整體的追加
extend:個體化擴編
count
統計列表中每個元素出現的次數
f1.count("python") 1 f1.count("go") 1 f2?=?[1,2,3,3,2,3,2,2,1] f2 [1, 2, 3, 3, 2, 3, 2, 2, 1] f2.count(3) 3 f2.count(4)??#?元素不存在則為0,而不是報錯 0Python中有個庫能夠直接統計列表中每個元素的個數:Count
from?collections?import?Countercount?=?Counter(f2) count Counter({1: 2, 2: 4, 3: 3})index
元素第一次出現的索引位置
f2 [1, 2, 3, 3, 2, 3, 2, 2, 1] f2.index(1)??#?1第一次出現的索引為0 0 f2.index(3)??#?3第一次出現的索引為2 2 f2.index(4)??#?元素不存在則會報錯 ---------------------------------------------------------------------------ValueError Traceback (most recent call last)<ipython-input-71-568e9ea7baf1> in <module> ----> 1 f2.index(4) # 元素不存在則會報錯ValueError: 4 is not in listinsert
在指定的位置插入數據。append和extend都是在末尾添加。list.insert(i,"待插入元素"),表示在索引i之前插入元素
lst1??#?查看lst1列表 ['python', 'java', 'go', 1, 2, 3] lst1.insert(1,"c++")??# 1號索引位置插入c++同樣是沒有返回值,說明是原地修改,lst1已經發生了變化,但是內存地址不變。
lst1 ['python', 'c++', 'java', 'go', 1, 2, 3] len(lst1)??#?長度為7 7 lst1.insert(9,?"html") lst1 ['python', 'c++', 'java', 'go', 1, 2, 3, 'html']上面的例子我們觀察到,雖然lst1的長度為7,但是在9號索引之前仍是可以插入成功的
lst4?=?["go","python"]??#?長度為2lst4.insert(10,"java") lst4??#?仍然是可以插入成功 ['go', 'python', 'java']說明當插入的索大于原列表的長度時候,會直接追加到末尾
小結:insert方法也是沒有返回值的,原地修改
pop
pop方法表示的是刪除頂部的元素;而且運行之后返回的就是該元素
lst1 ['python', 'c++', 'java', 'go', 1, 2, 3, 'html'] lst1.pop()?? 'html'通過運行結果發現:
最后面的元素被刪除了
函數運行后返回的是刪除的元素
remove
刪除列表中的第一次出現的某個元素,也就是說如果某個元素在列表中重復出現,只刪除第一個
原地刪除數據,沒有返回值
重復元素刪除第一個
如果元素不存在呢?運行結果直接報錯:
lst5.remove("html") ---------------------------------------------------------------------------ValueError Traceback (most recent call last)<ipython-input-88-957c479875d4> in <module> ----> 1 lst5.remove("html")ValueError: list.remove(x): x not in listreverse
將列表中的元素進行翻轉,函數沒有返回值
lst5 ['go', 'python', 'c++'] lst5.reverse()??#?沒有返回值 lst5??#?列表已經翻轉 ['c++', 'python', 'go']對比下reversed(list_object)函數,該函數返回的是翻轉后的可迭代對象:
reversed(lst5)??#?翻轉的可迭代對象 <list_reverseiterator at 0x109689490>實施翻轉之后是一個可迭代對象,我們需要使用list函數進行展開:
list(reversed(lst5))??#?lst5再次翻轉 ['go', 'python', 'c++']sort
對列表中的元素進行排序,只接受對列表的排序,中文官網學習地址:https://docs.python.org/zh-cn/3/howto/sorting.html
list.sort(key=None,?reverse=False)key : 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序。
reverse : 排序規則,reverse = True 降序, reverse = False 升序(默認)。
1、默認使用情況如下例子:
#?默認lst6.sort()?? lst6 ['c++', 'go', 'html', 'java', 'javascript', 'python']從第一個字母的ASCII碼開始比較,如果相同就比較下一個字母;默認是升序
ord("c")???#?查看c的ASCII碼值 99 chr(99) 'c' chr(1000)???#?每個數值都有對應的元素 '?' chr(400) '?'2、參數reverse的使用:
lst6 ['c++', 'go', 'html', 'java', 'javascript', 'python'] lst6.sort(reverse=True) lst6??#?改成了降序 ['python', 'javascript', 'java', 'html', 'go', 'c++']3、參數key的使用
student?=?["xiaoming","xiaozhang","Peter","Mike","Tom","Jimmy"]??#?定義新列表 student ['xiaoming', 'xiaozhang', 'Peter', 'Mike', 'Tom', 'Jimmy'] student.sort(key=len) student ['Tom', 'Mike', 'Peter', 'Jimmy', 'xiaoming', 'xiaozhang']根據傳入參數key的len函數,求解student列表中每個原始的長度,升序排列
student.sort(key=str.lower)????#?列表中的元素全部變成小寫開頭,再進行比較 student??? ['Jimmy', 'Mike', 'Peter', 'Tom', 'xiaoming', 'xiaozhang']根據首字母的順序進行比較,升序排列
ord("j")??#?str.lower函數已經全部轉成了小寫 106 ord("m") 109 ord("p")??#?其余類推 112關于另一個排序sorted函數,最大的不同點是:它對任何可迭代對象都可以進行排序,不僅僅是列表;同時,函數有返回值
針對任何可迭代對象
有返回值
針對其他可迭代對象的排序,比如字符串:
strings?=?"I?am?learning?python"??#?定義一個字符串stringssorted(strings.split(),key=len) ['I', 'am', 'python', 'learning']上面代碼的含義是先對字符串使用切割函數split(默認根據空格切割),對切割之后的每個字符串求長度len,升序排列得到結果
student???#??原列表是一直不變化的 ['Jimmy', 'Mike', 'Peter', 'Tom', 'xiaoming', 'xiaozhang']對嵌套列表的排序過程:
lst9?=?[[5,"python"],[2,"java"],[3,"c++"],[1,"javascript"]]sorted(lst9) [[1, 'javascript'], [2, 'java'], [3, 'c++'], [5, 'python']] sorted(lst9,key=lambda?x:len(x[1])) [[3, 'c++'], [2, 'java'], [5, 'python'], [1, 'javascript']]解釋下上面的代碼:
lambda是python的匿名函數(后面會詳細介紹)x為函數的參數
匿名函數的功能是取出列表中索引為1的元素,求出長度len
根據長度升序排列,長度最短為3(c++),最長為10(javascript)
總結
以上是生活随笔為你收集整理的【Python】Python入门-列表初相识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】Transformer 向轻
- 下一篇: 播放器之争:VLC VS SmartPl