日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/12 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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)??#?非空列表 True

list函數生成

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:個體化擴編

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

統計列表中每個元素出現的次數

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中有個庫能夠直接統計列表中每個元素的個數: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 list

insert

在指定的位置插入數據。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'

通過運行結果發現:

  • 最后面的元素被刪除了

  • 函數運行后返回的是刪除的元素

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

remove

刪除列表中的第一次出現的某個元素,也就是說如果某個元素在列表中重復出現,只刪除第一個

  • 原地刪除數據,沒有返回值

  • 重復元素刪除第一個

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

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

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

將列表中的元素進行翻轉,函數沒有返回值

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 升序(默認)。

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

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函數,最大的不同點是:它對任何可迭代對象都可以進行排序,不僅僅是列表;同時,函數有返回值

  • 針對任何可迭代對象

  • 有返回值

student ['Jimmy', 'Mike', 'Peter', 'Tom', 'xiaoming', 'xiaozhang'] sorted(student)???#?默認按照字母的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']

上面代碼的含義是先對字符串使用切割函數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)

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。