Python基礎(chǔ)(五): 列表

列表: 有序的可變的元素集合

定義:

  • 方式1

    • [元素1, 元素2, 元素3...]
    例如: [1, 2, 3, 4, 5]
    
  • 方式2

    • 列表生成式: 快速生成list
      • 語法1: range(stop), 取值范圍[0, stop)
      • 語法2: range(start, stop, step)
    list = range(10)
    # 取值: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
    
    list = range(2, 10)
    # 取值: 2, 3, 4, 5, 6, 7, 8, 9
    
    list = range(2, 10, 2)
    # 取值: 2, 4, 6, 8
    

    注意: 為了防止生成的列表沒有被使用, python3做了一些改變, 不會立即生成列表
    * 列表推導(dǎo)式: 從一個list快速推導(dǎo)出另一個list
    * 概念: 映射解析--一對一變更, 過濾--從多到少
    * 語法: [表達(dá)式 for 變量 in 列表]饼问、[表達(dá)式 for 變量 in 列表 if 條件]
    ```
    # [表達(dá)式 for 變量 in 列表]
    list = [num ** 2 for num in range(10)]
    print(list)
    # 打印: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

    list = [fillcar for fillcar in "abcdefg"]
    print(list)

    打印: ['a', 'b', 'c', 'd', 'e', 'f', 'g']

    [表達(dá)式 for 變量 in 列表 if 條件]

    list = [num ** 2 for num in range(10) if num % 2 == 0]
    print(list)

    打印: [0, 4, 16, 36, 64]

  • 列表的嵌套: 列表中的元素, 還可以是列表

  • 列表中可以存放不同類型的數(shù)據(jù)

list = [1, "2", 3, 4.0, "5"]
print(list)
# 打印: [1, '2', 3, 4.0, '5']

常用操作

增航厚、刪亥鬓、改、查欣簇、額外操作(判定、比較掀泳、排序况既、亂序、反轉(zhuǎn))

  • 增: 在列表中添加新的元素

    • append(object): 在列表的最后添加一個新的元素
      • 沒有返回值, 會改變原列表
    list = [1, 2, 3, 4]
    list.append(5)
    print(list)     # 打印: [1, 2, 3, 4, 5]
    
    • insert(index, object): 在列表中指定索引前插入一個元素
      • 沒有返回值, 會改變原列表
      • 可以往空數(shù)組中插入元素
    # 插入到列表的指定位置
    list = [1, 2, 3, 4]
    list.insert(0, 5)
    print(list)     # 打印: [5, 1, 2, 3, 4]
    
    # 空列表中插入元素
    list = []
    list.insert(0, 5)
    print(list)     # 打印: [5]
    
    # 插入到列表的最后位置
    list = [1, 2, 3, 4]
    list.insert(4, 5)
    print(list)
    
    • extend(iterable): 往列表中, 擴(kuò)展另一個可迭代序列
      • 沒有返回值, 會改變原列表
    # 擴(kuò)展一個數(shù)組
    list1 = [1, 2, 3]
    list2 = ["a", "b", "c"]
    list1.extend(list2)
    print(list1)        # 打印: [1, 2, 3, 'a', 'b', 'c']
    
    # 擴(kuò)展一個字符串
    list = [1, 2, 3]
    str = "abcdefg"
    list.extend(str)
    print(list)         # 打印: [1, 2, 3, 'a', 'b', 'c', 'd', 'e', 'f', 'g']
    
    • 列表乘法
      • 不會改變原列表, 只能是列表與整數(shù)相乘
    list = [1, 2, 3]
    print(list * 3)     # 打印: [1, 2, 3, 1, 2, 3, 1, 2, 3]
    
    • 列表加法
      • 將兩個列表的元素放到一個新的列表中, 原列表不變
      • 只能是兩個列表相加
    list1 = [1, 2, 3]
    list2 = ["a", "b", "c"]
    print(list1 + list2)    # 打印: [1, 2, 3, 'a', 'b', 'c']
    
  • 刪: 移除列表中的某個元素

    • del語句: 刪除列表中的元素, 也可以刪除變量
    # 刪除元素
    num = [1, 2, 3, 4, 5]
    del num[1]
    print(num)      # 打印: [1, 3, 4, 5]
    
    # 刪除元素
    num = [1, 2, 3, 4, 5]
    del num
    print(num)      # 報錯: NameError: name 'num' is not defined
    
    • pop(index=-1): 刪除指定索引的元素, 并將該元素做為返回值
      • index: 指定索引, 默認(rèn)為-1
      • 會將index指定的元素返回
      • 下標(biāo)不能越界, 否則報錯
    # 刪除默認(rèn)元素
    list = [1, 2, 3, 4, 5]
    result = list.pop()
    print(result, list)     # 打印: 5 [1, 2, 3, 4]
    
    # 刪除指定元素
    list = [1, 2, 3, 4, 5]
    result = list.pop(1)
    print(result, list)     # 打印: 2 [1, 3, 4, 5]
    
    • remove(object): 刪除列表中指定元素
      • 如果列表中存在多個相同元素, 則只會刪除最左邊的一個
      • 只能刪除列表中有的元素, 否則報錯
    # 刪除指定元素
    list = [1, 2, 3, 4, 5]
    list.remove(2)
    print(list)             # 打印: [1, 3, 4, 5]
    
    # 當(dāng)存在多個指定元素時, 只會刪除最左邊的一個
    list = [1, 2, 3, 2, 4, 5, 2]
    list.remove(2)
    print(list)             # 打印: [1, 3, 2, 4, 5, 2]
    
    # 刪除列表中不存在的元素, 會報錯
    list = [1, 2, 3, 4, 5]
    list.remove(6)
    print(list)             # 報錯: ValueError: list.remove(x): x not in list
    
    • 列表[lindex] = 值: 修改列表中指定索引的元素
      • index: 元素索引, 且不能越界
      • index: 可以為負(fù)數(shù), 即從后往前數(shù)
    # 修改列表中指定索引的元素
    list = [1, 2, 3, 4, 5]
    list[2] = 6
    print(list)      # 打印: [1, 2, 6, 4, 5]
    
    # 索引越界會報錯
    list = [1, 2, 3, 4, 5]
    list[5] = 6      # 報錯: IndexError: list assignment index out of range
    
    # 索引為負(fù)數(shù)
    list = [1, 2, 3, 4, 5]
    list[-2] = 6 
    print(list)     # 打印: [1, 2, 3, 6, 5]
    
    • 列表[index]:獲取單個元素
      • index: 元素索引, 可以為負(fù)數(shù), 負(fù)數(shù)時從后向前
      • index: 不可以越界
    # 獲取指定索引的元素
    list = [2, 3, 4, 5, 6]
    print(list[2])       # 打印: 4
    
    # 索引為負(fù)數(shù)的情況
    list = [2, 3, 4, 5, 6]
    print(list[-2])      # 打印: 5
    
    # 索引越界報錯
    list = [2, 3, 4, 5, 6]
    print(list[6])       # 報錯: IndexError: list index out of range
    
    • index(object, start=0, end=len(list)): 獲取元素的索引, 范圍[start, end)
      • object: 需要查找索引的元素
      • start: 查找的索引起點, 默認(rèn)值為0
      • end: 查找索引的終點, 默認(rèn)值為len(list)
      • 當(dāng)列表中有多個相同的指定元素時, 會默認(rèn)返回第一個該元素的下標(biāo)
      • 不能查找列表中沒有的元素, 否則報錯
    # 查找指定索引
    list = [2, 3, 4, 5, 6]
    index = list.index(5)
    print(index)        # 打印: 3
    
    # 查找不存在的元素, 報錯
    list = [2, 3, 4, 5, 6]
    index = list.index(7)
    print(index)        # 報錯: ValueError: 7 is not in list
    
    • count(object): 查找指定元素個數(shù)
      • object: 指定的元素
    list = [2, 3, 4, 5, 6, 5]
    count = list.count(5)
    print(count)        # 打印: 2
    
    • 列表[start=0:end=len(list):step]: 獲取多個元素, 切片操作, 范圍[start:end)
      • step: 步長, 默認(rèn)1, 正數(shù)正取, 負(fù)數(shù)倒取
      • setp: 正數(shù)時, start對應(yīng)元素必須在列表中位于end對應(yīng)元素的前方
      • setp: 負(fù)數(shù)時, start對應(yīng)元素必須在列表中位于end對應(yīng)元素的后方
      • 反轉(zhuǎn)字符串: 列表[::-1]
    # 正取
    list = [2, 3, 4, 5, 6, 5]
    print(list[1:4])        # 打印: [3, 4, 5]
    
    # 倒取
    list = [2, 3, 4, 5, 6, 5]
    print(list[-1:1:-1])    # 打印: [5, 6, 5, 4]
    
    # 反轉(zhuǎn)
    list = [2, 3, 4, 5, 6, 5]
    print(list[::-1])       # 打印: [5, 6, 5, 4, 3, 2]
    
  • 遍歷:

    • 方式一: 根據(jù)元素進(jìn)行遍歷
    list = ["a", "b", "c", "d", "e"]
    for object in list:
        print(object, end=" ")          # 打印: a b c d e 
    
    • 方式二: 根據(jù)索引進(jìn)行遍歷
    list = ["a", "b", "c", "d", "e"]
    for i in range(len(list)):
        print(list[i], end=" ")          # 打印: a b c d e 
    
    • 方式三: 根據(jù)每句對象進(jìn)行遍歷
      • enumerate(sequence, [start=0])
      • sequence: 一個序列, 迭代器, 或其他支持迭代器的對象
    # 使用enumerate(sequence, [start=0])獲取枚舉對象
    list = ["a", "b", "c"]
    print(enumerate(list))      # 打印: <enumerate object at 0x101cb4ea0>
    
    # 遍歷枚舉對象, 打印出的是元組
    list = ["a", "b", "c"]
    for e in enumerate(list):
        print(e, end = " ")     # 打印: (0, 'a') (1, 'b') (2, 'c') 
    
    # 通過元素獲取列表中元素的下標(biāo)和元素本身
    list = ["a", "b", "c"]
    for index, value in enumerate(list):
        print(index, value)  
    # 打印: 
    0 a
    1 b
    2 c
    
  • 判定:

    • 元素 in 列表: 判定列表中是否包含該元素
    list = [1, 2, 3]
    print(1 in list)        # 打印: True
    print(5 in list)        # 打印: False
    
    • 元素 not in 列表: 判定列表中是否不包含該元素
    list = [1, 2, 3]
    print(1 not in list)        # 打印: False
    print(5 not in list)        # 打印: True
    
  • 比較

    • Python2: 使用內(nèi)置函數(shù) cmp(列表1, 列表2): 從左到右, 逐個元素比較
      • 注意: cmp函數(shù)只有存在與Python2中
      • 返回值: 如果列表1小于列表2, 返回-1, 等于返回0, 大于返回1
    list1 = [1, 2]
    list2 = [1, 2, 3]
    print(cmp(list1, list2))        # 打印: -1
    
    • Python3: 使用比較運算符== > <, 從左到右, 逐個元素比較
      • 比較結(jié)果是布爾值
    list1 = [1, 2]
    list2 = [1, 2, 3]
    print(list1 == list2)        # 打印: False
    
  • 排序

    • 方式一: sorted(itrearble, key=None, reverse=False)
      • 內(nèi)置函數(shù), 可以對任何可迭代對象進(jìn)行排序
      • itrearble: 可迭代對象
      • key: 函數(shù), 該函數(shù)只有一個返回值, sorted函數(shù)會用這個值來排序
      • reverse: 是否降序排列, 默認(rèn)False
      • 返回值: 排序好的新列表
      • 原列表不變
    # 排序數(shù)組
    list = [1, 6, 2, 4, 3, 9, 5]
    result = sorted(list, reverse=True)
    print(result)       # 打印: [9, 6, 5, 4, 3, 2, 1]
    
    # 排序元組數(shù)組, 默認(rèn)使用每個元組中的第一個元素進(jìn)行比較
    list = [(1, "d"), (2, "c"), (3, "a"), (4, "d")]
    resilt = sorted(list, reverse=True)
    print(result)       # 打印: [(4, 'd'), (3, 'a'), (2, 'c'), (1, 'd')]
    
    # 排序元組數(shù)組, 使用key指定排序的對象是哪一個
    def getKey(x):
        return x[1]
    list = [(1, "d"), (2, "c"), (3, "a"), (4, "d")]
    resilt = sorted(list, key=getKey, reverse=False)
    print(resilt)     # 打印: [(3, 'a'), (2, 'c'), (1, 'd'), (4, 'd')]
    
    • 方式二: sort(key=None, reverse=False)
      • 功能與sorted(itrearble, key=None, reverse=False)相同
      • 沒有返回值
      • 唯一不同: sort是對象方法, 改變列表本身, sorted是內(nèi)置函數(shù), 不改變列表本身
    # 排序元組數(shù)組, 使用key指定排序的對象是哪一個
    def getKey(x):
        return x[1]
    list = [(1, "d"), (2, "c"), (3, "a"), (4, "d")]
    list.sort(key=getKey, reverse=False)
    print(list)     # 打印: [(3, 'a'), (2, 'c'), (1, 'd'), (4, 'd')]
    
  • 亂序

    • 使用random庫中的函數(shù)shuffle(list), 對列表進(jìn)行隨機(jī)亂序操作
      • random.shuffle(list)
      • 沒有返回值
      • 改變原列表
    import random
    list = [1, 2, 3, 4, 5]
    random.shuffle(list)
    print(list)                # 打印: [3, 4, 2, 5, 1]
    
  • 反轉(zhuǎn)

    • list.reverse(): 反轉(zhuǎn)列表元素
      • 沒有返回值
      • 改變原列表
    list = [1, 2, 3, 4, 5]
    list.reverse()
    print(list)                # 打印: [5, 4, 3, 2, 1]
    
    • list[::-1]: 反轉(zhuǎn)列表元素
      • 返回值: 反轉(zhuǎn)后的新列表
      • 原列表不變
    list = [1, 2, 3, 4, 5]
    print(list[::-1])         # 打印: [5, 4, 3, 2, 1]
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末属瓣,一起剝皮案震驚了整個濱河市载迄,隨后出現(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)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布寒砖。 她就那樣靜靜地躺著,像睡著了一般嫉拐。 火紅的嫁衣襯著肌膚如雪哩都。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天婉徘,我揣著相機(jī)與錄音漠嵌,去河邊找鬼。 笑死盖呼,一個胖子當(dāng)著我的面吹牛儒鹿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播几晤,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼约炎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起圾浅,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤掠手,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后狸捕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喷鸽,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年府寒,在試婚紗的時候發(fā)現(xiàn)自己被綠了魁衙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片报腔。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡株搔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纯蛾,到底是詐尸還是另有隱情纤房,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布翻诉,位于F島的核電站炮姨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碰煌。R本人自食惡果不足惜舒岸,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芦圾。 院中可真熱鬧蛾派,春花似錦、人聲如沸个少。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夜焦。三九已至壳澳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茫经,已是汗流浹背巷波。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留卸伞,地道東北人抹镊。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像瞪慧,于是被迫代替她去往敵國和親髓考。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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