日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【Python】Python入门-列表初相识

發(fā)布時間:2025/3/12 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】Python入门-列表初相识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

公眾號:尤而小屋
作者:Peter
編輯:Peter

在之前的文章中,我們已經(jīng)介紹了Python中的兩種常見數(shù)據(jù)類型:字符串和數(shù)字。本文中介紹的是Python中極其重要的數(shù)據(jù)類型:列表

在Python中,列表用一個方括號[]表示;括號里面可以是數(shù)字,字符串,布爾值(True或者False),甚至還可以嵌套列表等不同的數(shù)據(jù)類型。列表是有序的數(shù)據(jù)類型。

思維導(dǎo)圖

列表定義

列表的定義有多種方式:

空列表

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

通過布爾函數(shù)bool來判斷一個對象是真還是假:

bool(a)??#?空列表 False bool(c)??#?非空列表 True

list函數(shù)生成

list("1234") ['1',?'2',?'3',?'4']

小結(jié):從上面的多個例子,我們可以看到python列表中的數(shù)據(jù)類型是多樣的,從數(shù)字、字符串到布爾類型,再到嵌套的列表,都是裝的下的

操作

列表是Python的重要數(shù)據(jù)類型,其操作也是多樣化的。

基本操作

#?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]

相當(dāng)于是將兩個列表的內(nèi)容合并之后放在一個大列表中

#?3、成員判斷inf?=?["python","java","php","html"] f ['python', 'java', 'php', 'html'] "python"?in?f??#?python這個元素是否在列表f中,當(dāng)然是在 True "html"?in?f True "go"?in?f??#?go不在列表f False #?4、列表重復(fù)c?*?3? [1, 2, 'python', 1, 2, 'python', 1, 2, 'python'] b?*?2 [1, 2, 3, 1, 2, 3] # 5、列表求最值:根據(jù)列表中元素的字典的長度來比較max(f)?? 'python'

f列表中元素的第一個字母p是最大的。當(dāng)?shù)谝粋€字母相同比較第二個字母,y大于h;比較的是兩個字母的ASCII碼大小。

f ['python', 'java', 'php', 'html'] max(b) 3 min(f) 'html'

修改列表元素

之前講過的數(shù)據(jù)類型,字符串和數(shù)值型是不能修改的,但是列表卻是可以進行修改的,能夠?qū)崿F(xiàn)增刪改的操作

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']

列表刪除元素

列表中還可以實現(xiàn)元素的刪除,使用的是del方法

del?f[1] f??#?c++被刪除了 ['python', 'php', 'html', 'javascript']

列表常用函數(shù)

列表中有幾個常用的函數(shù),需要我們掌握:

  • append:將整體追加到列表的末尾

  • extend:列表中的每個元素進行合并,組成一個大的列表

  • index:查看元素的索引

  • insert:指定位置插入元素

  • pop:刪除頂部的元素(彈出棧頂元素)

  • remove:刪除第一次出現(xiàn)的元素;元素不存在則會報錯

  • 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??#?實現(xiàn)列表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)??#?數(shù)值型數(shù)據(jù)不能進行extend,因為它是不可迭代的(iterable) ---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-45-35eb2b66cb19> in <module> ----> 1 c.extend(3) # 數(shù)值型數(shù)據(jù)不能進行extend,因為它是不可迭代的(iterable)TypeError: 'int' object is not iterable

如何查看Python中的數(shù)據(jù)類型是否可迭代?使用hasattr()方法:

hasattr(c,"__iter__")??#?列表可迭代 True hasattr("learn?python","__iter__")??#?字符串可迭代 True hasattr(3,"__iter__")??#?數(shù)值型數(shù)據(jù)不可迭代 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.

在上面的例子中我們發(fā)現(xiàn)extend和append執(zhí)行之后,是沒有任何返回值的,它們是在原數(shù)據(jù)上直接添加的。

lst1?=?["python","java","go"] lst2?=?[1,2,3] id(lst1)??#?查看內(nèi)存地址 4452149200 lst3?=?lst1.extend(lst2)print(lst3)??#?賦值的結(jié)果仍為None None lst1???#?其實lst1已經(jīng)變化了 ['python', 'java', 'go', 1, 2, 3] id(lst1)??#?內(nèi)存地址并沒改變 4452149200

像這種修改數(shù)據(jù)之后,內(nèi)存地址仍然沒有變化的操作,我們稱之為原地修改,不影響對象的內(nèi)存地址

二者區(qū)別

  • append:整體的追加

  • extend:個體化擴編

f ['python', 'php', 'html', 'javascript', 'java'] g?=?["go","c++"] f.append(g)??#?追加整體 f ['python', 'php', 'html', 'javascript', 'java', ['go', 'c++']] f1?=?['python',?'php',?'html',?'javascript',?'java']??#?和之前f相同f1.extend(g)??#?每個元素的追加 f1?? ['python', 'php', 'html', 'javascript', 'java', 'go', 'c++']

count

統(tǒng)計列表中每個元素出現(xiàn)的次數(shù)

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,而不是報錯 0

Python中有個庫能夠直接統(tǒng)計列表中每個元素的個數(shù):Count

from?collections?import?Countercount?=?Counter(f2) count Counter({1: 2, 2: 4, 3: 3})

index

元素第一次出現(xiàn)的索引位置

f2 [1, 2, 3, 3, 2, 3, 2, 2, 1] f2.index(1)??#?1第一次出現(xiàn)的索引為0 0 f2.index(3)??#?3第一次出現(xiàn)的索引為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 list

insert

在指定的位置插入數(shù)據(jù)。append和extend都是在末尾添加。list.insert(i,"待插入元素"),表示在索引i之前插入元素

lst1??#?查看lst1列表 ['python', 'java', 'go', 1, 2, 3] lst1.insert(1,"c++")??# 1號索引位置插入c++

同樣是沒有返回值,說明是原地修改,lst1已經(jīng)發(fā)生了變化,但是內(nèi)存地址不變。

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']

說明當(dāng)插入的索大于原列表的長度時候,會直接追加到末尾

小結(jié):insert方法也是沒有返回值的,原地修改

pop

pop方法表示的是刪除頂部的元素;而且運行之后返回的就是該元素

lst1 ['python', 'c++', 'java', 'go', 1, 2, 3, 'html'] lst1.pop()?? 'html'

通過運行結(jié)果發(fā)現(xiàn):

  • 最后面的元素被刪除了

  • 函數(shù)運行后返回的是刪除的元素

lst1???#??已經(jīng)沒有了html元素 ['python', 'c++', 'java', 'go', 1, 2, 3]

remove

刪除列表中的第一次出現(xiàn)的某個元素,也就是說如果某個元素在列表中重復(fù)出現(xiàn),只刪除第一個

  • 原地刪除數(shù)據(jù),沒有返回值

  • 重復(fù)元素刪除第一個

lst5?=?["python","go","java","python","c++"] lst5 ['python', 'go', 'java', 'python', 'c++'] lst5.remove("python")??#?原地刪除,沒有返回值 lst5??#?第一個python已經(jīng)被刪除了 ['go', 'java', 'python', 'c++'] lst5.remove("java") lst5??#?java被刪除了 ['go', 'python', 'c++']

如果元素不存在呢?運行結(jié)果直接報錯:

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 list

reverse

將列表中的元素進行翻轉(zhuǎn),函數(shù)沒有返回值

lst5 ['go', 'python', 'c++'] lst5.reverse()??#?沒有返回值 lst5??#?列表已經(jīng)翻轉(zhuǎn) ['c++', 'python', 'go']

對比下reversed(list_object)函數(shù),該函數(shù)返回的是翻轉(zhuǎn)后的可迭代對象:

reversed(lst5)??#?翻轉(zhuǎn)的可迭代對象 <list_reverseiterator at 0x109689490>

實施翻轉(zhuǎn)之后是一個可迭代對象,我們需要使用list函數(shù)進行展開:

list(reversed(lst5))??#?lst5再次翻轉(zhuǎn) ['go', 'python', 'c++']

sort

對列表中的元素進行排序,只接受對列表的排序,中文官網(wǎng)學(xué)習(xí)地址:https://docs.python.org/zh-cn/3/howto/sorting.html

list.sort(key=None,?reverse=False)
  • key : 主要是用來進行比較的元素,只有一個參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序。

  • reverse : 排序規(guī)則,reverse = True 降序, reverse = False 升序(默認(rèn))。

lst6?=?["python","javascript","go","java","html","c++"] lst6 ['python', 'javascript', 'go', 'java', 'html', 'c++']

1、默認(rèn)使用情況如下例子:

#?默認(rèn)lst6.sort()?? lst6 ['c++', 'go', 'html', 'java', 'javascript', 'python']

從第一個字母的ASCII碼開始比較,如果相同就比較下一個字母;默認(rèn)是升序

ord("c")???#?查看c的ASCII碼值 99 chr(99) 'c' chr(1000)???#?每個數(shù)值都有對應(yīng)的元素 '?' chr(400) '?'

2、參數(shù)reverse的使用:

lst6 ['c++', 'go', 'html', 'java', 'javascript', 'python'] lst6.sort(reverse=True) lst6??#?改成了降序 ['python', 'javascript', 'java', 'html', 'go', 'c++']

3、參數(shù)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']

根據(jù)傳入?yún)?shù)key的len函數(shù),求解student列表中每個原始的長度,升序排列

student.sort(key=str.lower)????#?列表中的元素全部變成小寫開頭,再進行比較 student??? ['Jimmy', 'Mike', 'Peter', 'Tom', 'xiaoming', 'xiaozhang']

根據(jù)首字母的順序進行比較,升序排列

ord("j")??#?str.lower函數(shù)已經(jīng)全部轉(zhuǎn)成了小寫 106 ord("m") 109 ord("p")??#?其余類推 112

關(guān)于另一個排序sorted函數(shù),最大的不同點是:它對任何可迭代對象都可以進行排序,不僅僅是列表;同時,函數(shù)有返回值

  • 針對任何可迭代對象

  • 有返回值

student ['Jimmy', 'Mike', 'Peter', 'Tom', 'xiaoming', 'xiaozhang'] sorted(student)???#?默認(rèn)按照字母的ASCII碼大小來排序 ['Jimmy', 'Mike', 'Peter', 'Tom', 'xiaoming', 'xiaozhang'] sorted(student,key=len) ['Tom', 'Mike', 'Jimmy', 'Peter', 'xiaoming', 'xiaozhang'] sorted(student,key=str.lower)??#?字母變成小寫之后再排序 ['Jimmy', 'Mike', 'Peter', 'Tom', 'xiaoming', 'xiaozhang']

針對其他可迭代對象的排序,比如字符串:

strings?=?"I?am?learning?python"??#?定義一個字符串stringssorted(strings.split(),key=len) ['I', 'am', 'python', 'learning']

上面代碼的含義是先對字符串使用切割函數(shù)split(默認(rèn)根據(jù)空格切割),對切割之后的每個字符串求長度len,升序排列得到結(jié)果

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的匿名函數(shù)(后面會詳細介紹)x為函數(shù)的參數(shù)

  • 匿名函數(shù)的功能是取出列表中索引為1的元素,求出長度len

  • 根據(jù)長度升序排列,長度最短為3(c++),最長為10(javascript)

lst9???#?沒有變化 [[5, 'python'], [2, 'java'], [3, 'c++'], [1, 'javascript']]因為sorted函數(shù)有返回值,所以對原對象是不會有影響的。 往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯黃海廣老師《機器學(xué)習(xí)課程》課件合集 本站qq群851320808,加入微信群請掃碼:

總結(jié)

以上是生活随笔為你收集整理的【Python】Python入门-列表初相识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。