<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【Python】Python入門-列表初相識

          共 9904字,需瀏覽 20分鐘

           ·

          2021-08-20 08:27

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

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

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

          思維導(dǎo)圖

          列表定義

          列表的定義有多種方式:

          空列表

          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、成員判斷in

          f = ["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ù)值型是不能修改的,但是列表卻是可以進(jìn)行修改的,能夠?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:列表中的每個元素進(jìn)行合并,組成一個大的列表
          • index:查看元素的索引
          • insert:指定位置插入元素
          • pop:刪除頂部的元素(彈出棧頂元素)
          • remove:刪除第一次出現(xiàn)的元素;元素不存在則會報錯
          • reverse:將列表中元素的順序顛倒過來;類比reversed
          • sort:列表元素的排序;類比sorted

          append

          往列表的末尾追加元素,返回沒有返回值;直接原地修改


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

          如果上字符串元素,會自動的進(jìn)行拆解之后再進(jìn)行擴張追加

          c.extend(["go"])  # 只追加列表的一個元素
          c
          [1, 2, 'python', 'python', 'php', 'html', 'javascript', 'java', 'g', 'o', 'go']
          c.extend(3)  # 數(shù)值型數(shù)據(jù)不能進(jìn)行extend,因為它是不可迭代的(iterable)
          ---------------------------------------------------------------------------

          TypeError Traceback (most recent call last)

          <ipython-input-45-35eb2b66cb19> in <module>
          ----> 1 c.extend(3) # 數(shù)值型數(shù)據(jù)不能進(jìn)行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 Counter

          count = 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"]  # 長度為2

          lst4.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

          將列表中的元素進(jìn)行翻轉(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ù)進(jìn)行展開:

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

          sort

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

          list.sort(key=None, reverse=False)
          • key : 主要是用來進(jìn)行比較的元素,只有一個參數(shù),具體的函數(shù)的參數(shù)就是取自于可迭代對象中,指定可迭代對象中的一個元素來進(jìn)行排序。
          • 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)    # 列表中的元素全部變成小寫開頭,再進(jìn)行比較
          student   
          ['Jimmy', 'Mike', 'Peter', 'Tom', 'xiaoming', 'xiaozhang']

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

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

          關(guān)于另一個排序sorted函數(shù),最大的不同點是:它對任何可迭代對象都可以進(jìn)行排序,不僅僅是列表;同時,函數(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"  # 定義一個字符串strings

          sorted(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ì)介紹)x為函數(shù)的參數(shù)
          • 匿名函數(shù)的功能是取出列表中索引為1的元素,求出長度len
          • 根據(jù)長度升序排列,長度最短為3(c++),最長為10(javascript)
          lst9   # 沒有變化
          [[5, 'python'], [2, 'java'], [3, 'c++'], [1, 'javascript']]

          因為sorted函數(shù)有返回值,所以對原對象是不會有影響的。
          往期精彩回顧




          本站qq群851320808,加入微信群請掃碼:

          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲天堂无码在线观看 | 日韩爱爱视频 | 国产肥胖老太性HD | 黄色小电影在线 | 人妻久久久久免费肉丝足交 |