Python之列表

列表 list

列表是由一系列特定元素組成的捌年,元素和元系之間沒有任何關(guān)聯(lián)關(guān)系,但他們之間有先后順序關(guān)系

  • 列表是一種容器
  • 列表是序列的一種
  • 列表是可以被改變的序列

列表的創(chuàng)建

  • 創(chuàng)建空列表的字面值

      L = []  # L綁定空列表
    
  • 創(chuàng)建非空列表

      L = [1, 2, 3, 4]
      L = ["北京", "上海", "重慶"]  
      L = [1, 'two', 3, '四']
      L = [1, 2, [3.1, 3.2, 3.3], 4] 
    

列表的構(gòu)造(創(chuàng)建)函數(shù) list

  • list() 生成一個(gè)空的列表,等同于 []

  • list(iterable) 用可迭代對象創(chuàng)建一個(gè)列表

      L = list()            # L 為空列表,等同于 L = []
      L = list("ABCD")      # L = ['A','B','C','D']
      L = list(range(1, 10, 2)) # L = [1,3,5,7,9]
    

列表的運(yùn)算

算術(shù)運(yùn)算

  • + 用于拼接列表

  • += 用于原列表與左側(cè)可迭代對象進(jìn)行拼接,生成新的列

  • * 生成重復(fù)的列表

  • *= 用于生成重復(fù)的列表回怜,同時(shí)用變量綁定新列表

      x = [1,2,3]
      y = [4,5,6]
      z = x + y  # z = [1,2,3,4,5,6]
    
      x = [1,2,3]
      x += [4,5,6]  # x = [1,2,3,4,5,6]
      x = [1,2,3]
      x += 'ABC'  # += 右側(cè)必須是可迭代對象
    
      x = [1,2,3] * 2  # x = [1,2,3,1,2,3]
      
      x = [1, 2]
      x *= 3  # x = [1,2,1,2,1,2]
    

比較運(yùn)算

  • 小于 <

  • 大于 >

  • 等于 ==

  • 小于等于 <=

  • 大于等于 >=

  • 不等于 !=

      x = [1,2,3]
      y = [2,3,4]
      x != y                       # True
      x > [1,2]                    # True
      x < y                        # True
      [1,3,2] > [1,2,3]            # True
      ['AB', 'CD'] > ['AC', 'BD']  # False
      [1, 'two'] > ['two', 1]      # TypeError
    

列表的 in/not in

  • 判斷一個(gè)數(shù)據(jù)元素是否存在于容器(列表)內(nèi),如果存在返回 True, 否則返回 False

  • not in 的返回值與 in 運(yùn)算符相反

        x = [1, 'Two', 3.14, '四']
        1 in x        # True
        2 in x        # False
        3 not in x    # True
       '四' not in x  # False
    

列表的索引 index

列表的索引語句

列表[整數(shù)表達(dá)式]

用法

  • 列表的索引取值與字符串的索引取值規(guī)則完全相同

  • 列表的索引為分正向索引和反向索引

      L = ['A', 2, 'B', 3]
      print(L[1])  # 2
      x = L[2]   # x = 'B'
    

列表的索引賦值

列表是可變的序列埂陆,可以通過索引賦值改變列表中的元素

語法

列表[索引] = 表達(dá)式

x = [1,2,3,4]
x[2] = 3.14  # 改變了第三個(gè)元素的值

列表的切片 slice

  • 列表[:]

  • 列表[::]

  • 列表的切片取值返回一個(gè)列表早歇,規(guī)則等同于字符串的切片規(guī)則

      x = list(range(9))
      y = x[1:9:2]  # y = [1,3,5,7]
    

列表的切片賦值

列表[切片] = 可迭代對象

說明

切片賦值的賦值運(yùn)算符的右側(cè)必須是一個(gè)可迭代對象

L = [2,3,4]   
L[0:1] = [1.1, 2.2]
print(L)                  # [1.1, 2.2, 3, 4]

L = [2,3,4]
L[:] = [7,8]              # [7,8]
L = [2,3,4]
L[1:2] = [3.1, 3.2, 3.3]  # [2,3.1, 3.2, 3.3,4]

L = [2,3,4]
L[1:1] = [2.1, 2.2]       # [2, 2.1, 2.2, 3, 4]

L = [2,3,4] 
L[0:0] = [0, 1]           # L=[0, 1, 2,3,4]   

L = [2,3,4] 
L[3:3] = [5,6]            # [2,3,4, 5,6]

L = [2,3,4]
L[1:2] = []               # [2,4]
注意點(diǎn)

對于步長不等于1的切片賦值,賦值運(yùn)算符的右側(cè)的可迭代對象提供元素的個(gè)數(shù)一定要等于切片切出的段數(shù)

L = [1,2,3,4,5,6]
L[::2] = 'ABCD'  # 錯(cuò)的
L[::2] = 'ABC'   # 對的

del 語句用于刪除列表元素

  • del 列表[索引]

  • del 列表[切片]

      L = [1,2,3,4,5,6]
      del L[0]         # L = [2,3,4,5,6]
      del L[-1]        # L = [2,3,4,5]
    
      L = [1,2,3,4,5,6]
      del L[::2]       # L = [2, 4, 6]
    

Python3中常用的列表方法

詳見 Python3中常用的列表方法

Python3中常用的序列函數(shù):

  • len(seq) 返回序列的長度

  • max(x) 返回序列的最大值元素

  • min(x) 返回序列的最小值元素

  • sum(x) 返回序列中所有元素的和(元素必須是數(shù)值類型)

  • any(x) 真值測試, 如果列表中其中一個(gè)值為真值則返回True,否則返回False

  • all(x) 真值測試憔涉,如果列表中所有值為真值订框,則返回True,只要有一個(gè)為假,則返回False

      s = "ABCD"
      print(len(s))  # 4
      print(max(s))  # D
      print(min(s))  # A
    
      lst1 = [1,2,3]
      lst2 = [0,1,2]
      
      print(sum(lst1)) # 6
      print(any(lst1)) # True
      print(all(lst1)) # True
      
      print(sum(lst2)) # 3
      print(any(lst2)) # True
      print(all(lst2)) # False
    

列表總結(jié)

創(chuàng)建列表

  • 用中括號(hào) [] 包裹元素兜叨,元素使用逗號(hào)分隔

  • list() 方法穿扳,轉(zhuǎn)化生成列表

  • 列表生成式/列表解析式/列表推導(dǎo)式,生成列表

      list_a = [1, 2, 3]
      list_b = list("abc") # list_b == ['a', 'b', 'c']
      list_c = list((4, 5, 6)) # list_c == [4, 5, 6]
      list_d = [i for i in list_a]  # list_d == [1, 2, 3]
      list_e = [i*j for i in list_a for j in list_c] # list_e == [4,5,6,10,12,12,15,18]
      list_f = [i*j for i,j in zip(list_a,list_c)] # list_f == [4, 10, 18]
      list_g = [i for i in list_a if i%2 == 0] # list_g == [2]
      
      # 結(jié)合range()函數(shù)国旷,range(start, stop[, step])
      list_h = list(range(3)) # list_h == [0, 1, 2]
      list_i = list(range(3,7)) # list_i == [3, 4, 5, 6]
      list_j = list(range(3,9,2)) # list_j == [3, 5, 7]
      
      # 找出100以內(nèi)的能夠被3整除的正整數(shù)
      list_k = list(range(3,100,3)) # list_k == [3, 6, 9, ..., 96, 99]
    

擴(kuò)充列表

  • append() 方法矛物,在列表尾部添加單個(gè)新元素。

  • insert() 方法跪但,在列表中指定位置添加元素履羞。

  • + 運(yùn)算符,將兩個(gè)列表拼接出一個(gè)新列表特漩。

  • extend() 方法吧雹,在一個(gè)列表后面拼接進(jìn)另一個(gè)列表

      # 以下分別添加2個(gè)元素
      list_a = []
      list_a.append('happy')  # list_a == ['happy']
      list_a.insert(0, 'very') # list_a == ['very', 'happy']
    
      # 以下兩種擴(kuò)充列表方式
      list_1 = ['I', 'am']
      list_2 = ['very', 'happy']
      list_3 = list_1 + list_2  # 新列表 list_3 == ['I', 'am', 'very', 'happy']
      list_1.extend(list_2)  # 原列表1擴(kuò)充骨杂,list_1 == ['I', 'am', 'very', 'happy']
    

刪減列表與銷毀列表

  • del list[m] 語句涂身,刪除指定索引 m 處的元素。

  • remove() 方法搓蚪,刪除指定值的元素(第一個(gè)匹配項(xiàng))蛤售。

  • pop() 方法,取出并刪除列表末尾的單個(gè)元素。

  • pop(m) 方法悴能,取出并刪除索引值為m的元素揣钦。

  • clear() 方法,清空列表的元素漠酿。(杯子還在冯凹,水倒空了)

  • del list 語句,銷毀整個(gè)列表炒嘲。(杯子和水都沒有了)

      # 以下4種刪除列表元素方式
      list_1 = list_2 = list_3 = list_4 = ['I', 'am', 'very', 'happy']
      del list_1[0]  # list_1 == ['am', 'very', 'happy']
      list_2.remove('I') # list_2 == ['am', 'very', 'happy']
      list_3.pop()  # list_3 == ['I', 'am', 'very']
      list_4.pop(0)  # list_4 == ['am', 'very', 'happy']
      
      # 清空與銷毀
      list_a = [1, 2, 3]
      list_b = [1, 2, 3]
      list_b.clear()   # list_b == []
      del list_a   # 沒有l(wèi)ist_a了宇姚,再使用則會(huì)報(bào)錯(cuò)
    

列表切片

基本含義

從第 i 位索引起,向右取到后 n 位元素為止夫凸,按 m 間隔過濾

基本格式

[i : i+n : m]:

  • i 是切片的起始索引值浑劳,為列表首位時(shí)可省略;

  • i+n 是切片的結(jié)束位置夭拌,為列表末位時(shí)可省略魔熏;

  • m 可以不提供,默認(rèn)值是1鸽扁,不允許為0蒜绽,當(dāng)m為負(fù)數(shù)時(shí),列表翻轉(zhuǎn)桶现。

  • 注意:這些值都可以大于列表長度滓窍,不會(huì)報(bào)越界。

      li = [1, 4, 5, 6, 7, 9, 11, 14, 16]
      
      # 以下寫法都可以表示整個(gè)列表
      X = len(li)
      li[0:X] == li[0:] == li[:X] == li[:] == li[::] == li[-X:X] == li[-X:]
      
      li[1:5] == [4,5,6,7] # 從1起巩那,取5-1位元素
      li[1:5:2] == [4,6] # 從1起吏夯,取5-1位元素,按2間隔過濾
      li[-1:] == [16] # 取倒數(shù)第一個(gè)元素
      li[-4:-2] == [9, 11] # 從倒數(shù)第四起即横,取-2-(-4)=2位元素
      li[:-2] == li[-len(li):-2] == [1,4,5,6,7,9,11] # 從頭開始噪生,取-2-(-len(li))=7位元素
      
      # 注意列表先翻轉(zhuǎn),再截取
      li[::-1] == [16,14,11,9,7,6,5,4,1] # 翻轉(zhuǎn)整個(gè)列表
      li[::-2] == [16,11,7,5,1] # 翻轉(zhuǎn)整個(gè)列表东囚,再按2間隔過濾
      li[:-5:-1] == [16,14,11,9] # 翻轉(zhuǎn)整個(gè)列表跺嗽,取-5-(-len(li))=4位元素
      li[:-5:-3] == [16,9] # 翻轉(zhuǎn)整個(gè)列表,取-5-(-len(li))=4位元素页藻,再按3間隔過濾
      
      li[::0]  # 報(bào)錯(cuò)(ValueError: slice step cannot be zero)
    

列表生成式

  • 列表生成式即列表推導(dǎo)式或列表解析式

  • 列表生成式有一個(gè)致命的缺點(diǎn):它一次性把所有元素加載到內(nèi)存中桨嫁,當(dāng)列表過長的時(shí)候,便會(huì)占據(jù)過多的內(nèi)存資源份帐,而且璃吧,我們通常僅需要使用少數(shù)的元素,這樣未使用的元素所占據(jù)的絕大部分的內(nèi)存废境,就成了不必要的支出

      l = [x*2 for x in range(5)]  # 列表生成式畜挨,4以內(nèi)整數(shù)的2倍數(shù)
    

其它操作

  • len() 方法筒繁,統(tǒng)計(jì)全部元素的個(gè)數(shù)。

  • count() 方法巴元,統(tǒng)計(jì)指定值的元素的個(gè)數(shù)毡咏。

  • max() 方法,統(tǒng)計(jì)元素中的最大值(要求元素類型相同逮刨;數(shù)字類型直接比較呕缭,其它類型比較 id

  • min() 方法,統(tǒng)計(jì)元素中的最小值(要求元素類型相同修己;數(shù)字類型直接比較臊旭,其它類型比較 id

  • index() 方法,查找指定值的元素的索引位置(第一個(gè)匹配項(xiàng))箩退。

  • reverse() 方法离熏,翻轉(zhuǎn)列表中的元素。

  • copy() 方法戴涝,淺拷貝并生成新的列表滋戳。

  • deepcopy() 方法,深拷貝并生成新的列表啥刻。

  • sort() 方法奸鸯,在原列表基礎(chǔ)上進(jìn)行排序。

  • sorted() 方法可帽,將新列表基礎(chǔ)上對原列表的元素進(jìn)行排序娄涩。

      list_1 = [2018, 10, '2018-10-1', ['hi', 1, 2], (33, 44)]
      len(list_1) == 5
      list_1.count(10) == 1 # 元素10的數(shù)量為1
      list_1.index(10) == 1 # 元素10的索引為1
      list_1.reverse() # list_1 == [(33, 44), ['hi', 1, 2], '2018-10-1', 10, 2018]
      
      # 比較淺拷貝與深拷貝
      import copy
      list_a = [2018, 10, '2018-10-1', ['hi', 1, 2], (33, 44)]
      list_b = ['hi', 1, 2]
      list_c = list_a.copy() # list_c == [2018, 10, '2018-10-1', ['hi', 1, 2], (33, 44)]
      list_d = copy.deepcopy(list_a) # list_d == [2018, 10, '2018-10-1', ['hi', 1, 2], (33, 44)]
      
      # 改變原列表中的可變對象元素
      list_a[3].append('new') # list_a == [2018, 10, '2018-10-1', ['hi', 1, 2, 'new'], (33, 44)]
      
      # 淺拷貝中的可變對象會(huì)隨原列表變化而變化
      list_c == [2018, 10, '2018-10-1', ['hi', 1, 2, 'new'], (33, 44)]
      
      # 深拷貝中的可變對象不會(huì)隨原列表變化而變化
      list_d == [2018, 10, '2018-10-1', ['hi', 1, 2], (33, 44)]
      
      # 比較sort() 與 sorted()
      list_1 = list_2 = [2,1,4,6,5,3]
      list_1.sort() # 原列表變化:list_1 == [1,2,3,4,5,6]
      list_3 = sorted(list_2) # 原列表不變:list_2 == [2,1,4,6,5,3]; list_3 == [1,2,3,4,5,6]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市映跟,隨后出現(xiàn)的幾起案子蓄拣,更是在濱河造成了極大的恐慌,老刑警劉巖努隙,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件球恤,死亡現(xiàn)場離奇詭異,居然都是意外死亡荸镊,警方通過查閱死者的電腦和手機(jī)咽斧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躬存,“玉大人张惹,你說我怎么就攤上這事×胫蓿” “怎么了宛逗?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钦椭。 經(jīng)常有香客問我拧额,道長,這世上最難降的妖魔是什么彪腔? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任侥锦,我火速辦了婚禮,結(jié)果婚禮上德挣,老公的妹妹穿的比我還像新娘恭垦。我一直安慰自己,他們只是感情好格嗅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布番挺。 她就那樣靜靜地躺著,像睡著了一般屯掖。 火紅的嫁衣襯著肌膚如雪玄柏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天贴铜,我揣著相機(jī)與錄音粪摘,去河邊找鬼。 笑死绍坝,一個(gè)胖子當(dāng)著我的面吹牛徘意,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播轩褐,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼椎咧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了把介?” 一聲冷哼從身側(cè)響起勤讽,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拗踢,沒想到半個(gè)月后地技,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秒拔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年莫矗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砂缩。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡作谚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庵芭,到底是詐尸還是另有隱情妹懒,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布双吆,位于F島的核電站眨唬,受9級特大地震影響会前,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匾竿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一瓦宜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岭妖,春花似錦临庇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斋攀,卻和暖如春已卷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淳蔼。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工悼尾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肖方。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓闺魏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親俯画。 傳聞我的和親對象是個(gè)殘疾皇子析桥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容