(六)Python列表,你真的瞭解嗎

上一篇:(五)Python從入門到精通之常用內置函數2

Python常見序列介紹

  • 序列:在python中,把大量數據組合在一起形成的集合體叫做序列
  • python中常用的序列結構有字符串、列表、元組、字典、集合
  • 序列按照是否有順序分爲有序序列和無序序列,以及根據元素是否可以增刪改操作分爲可變序列和不可變序列
    在這裏插入圖片描述

列表

  • 列表(list)是最重要的Python內置對象之一,是包含若干元素的有序連續內存空間。
  • 在形式上,列表的所有元素放在一對方括號[]中,相鄰元素之間使用逗號分隔。
  • 在Python中,同一個列表中元素的數據類型可以各不相同,可以同時包含整數、實數、字符串等基本類型的元素,也可以包含列表、元組、字典、集合、函數以及其他任意對象。
  • 如果只有一對方括號而沒有任何元素則表示空列表。
[10, 20, 30, 40]
['crunchy frog', 'ram bladder', 'lark vomit']
['spam', 2.0, 5, [10, 20]]
[['file1', 200,7], ['file2', 260,9]]
[{3}, {5:6}, (1, 2, 3)]

一、列表創建與刪除

創建方法:

  1. 使用“=”直接將一個列表賦值給變量即可創建列表對象。
>>> a_list = ['a', 'b', 'mpilgrim', 'z', 'example']
>>> a_list = []                       #創建空列表
  1. 使用list()函數把元組、range對象、字符串、字典、集合或其他可迭代對象轉換爲列表。
>>> list((3,5,7,9,11))                #將元組轉換爲列表
[3, 5, 7, 9, 11]
>>> list(range(1, 10, 2))             #將range對象轉換爲列表(從1開始迭代到10,步長爲2)
[1, 3, 5, 7, 9]
>>> list('hello world')               #將字符串轉換爲列表
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
>>> list({3,7,5})                     #將集合轉換爲列表
[3, 5, 7]
>>> list({'a':3, 'b':9, 'c':78})      #將字典的鍵:值對中的“鍵”轉換爲列表
['a', 'c', 'b']
>>> list({'a':3, 'b':9, 'c':78}.items())#將字典的“鍵:值”對轉換爲列表
[('b', 9), ('c', 78), ('a', 3)]
>>> x = list()                          #創建空列表

刪除方法:
當一個列表不再使用時,可以使用del命令將其刪除。

>>> x = [1, 2, 3]
>>> del x                      #刪除列表對象
>>> x                          #對象刪除後元素所佔空間被釋放,無法再訪問,拋出異常
NameError: name 'x' is not defined

二、列表元素訪問

在這裏插入圖片描述

>>> x = list('Python')             #創建類別對象
>>> x
['P', 'y', 't', 'h', 'o', 'n']
>>> x[0]                           #下標爲0的元素,第一個元素
'P'
>>> x[-1]                          #下標爲-1的元素,最後一個元素
'n'

在這裏插入圖片描述

三、列表常用方法

在這裏插入圖片描述

  1. append()、insert()、extend()(注意這些都是方法,函數一般加ed)

append()用於向列表尾部追加一個元素,insert()用於向列表任意指定位置插入一個元素,extend()用於將另一個列表中的所有元素追加至當前列表的尾部。

>>> x = [1, 2, 3]
>>> x.append(4)                     #在尾部追加元素
>>> x.insert(0, 0)                  #在指定位置插入元素
>>> x.extend([5, 6, 7])             #在尾部追加多個元素
>>> x
[0, 1, 2, 3, 4, 5, 6, 7]
  1. pop()、remove()

pop()用於刪除並返回指定位置(默認是最後一個)上的元素;remove()用於刪除列表中第一個值與指定值相等的元素。
另外,還可以使用del命令刪除列表中指定位置的元素。

>>> x = [1, 2, 3, 4, 5, 6, 7]
>>> x.pop()                        #彈出並返回尾部元素
7
>>> x.pop(0)                       #彈出並返回指定位置的元素
1
>>> x = [1, 2, 1, 1, 2]
>>> x.remove(2)                    #刪除首個值爲2的元素
>>> del x[3]                       #刪除指定位置上的元素
>>> x
[1, 1, 1]
  1. count()、index()

列表方法count()用於返回列表中指定元素出現的次數;index()用於返回指定元素在列表中首次出現的位置,如果該元素不在列表中則拋出異常。

>>> x = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
>>> x.count(3)                     #元素3在列表x中的出現次數
3
>>> x.count(5)                     #不存在,返回0
0
>>> x.index(2)                     #元素2在列表x中首次出現的索引
1
>>> x.index(5)                     #列表x中沒有5,拋出異常
ValueError: 5 is not in list
  1. sort()、reverse()

列表對象的sort()方法用於按照指定的規則對所有元素進行排序;reverse()方法用於將列表所有元素逆序或翻轉。

>>> x = list(range(11))                       #包含11個整數的列表
>>> import random
>>> random.shuffle(x)                         #把列表x中的元素隨機亂序
>>> x
[6, 0, 1, 7, 4, 3, 2, 8, 5, 10, 9]
>>> x.sort(key=lambda item:len(str(item)), reverse=True)  #按轉換成字符串以後的長度,降序排列
>>> x
[10, 6, 0, 1, 7, 4, 3, 2, 8, 5, 9]
>>> x.sort(key=str)                           #按轉換爲字符串後的大小,升序排序
>>> x
[0, 1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x.sort()                                  #按默認規則排序
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> x.reverse()                               #把所有元素翻轉或逆序
>>> x
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

四、列表對象支持的運算符

  1. 加法運算符+也可以實現列表增加元素的目的,但不屬於原地操作,而是返回新列表,涉及大量元素的複製,效率非常低。使用複合賦值運算符+=實現列表追加元素時屬於原地操作,與append()方法一樣高效。
>>> x = [1, 2, 3]
>>> id(x)
53868168
>>> x = x + [4]                        #連接兩個列表
>>> x
[1, 2, 3, 4]
>>> id(x)                              #內存地址發生改變
53875720
>>> x += [5]                           #爲列表追加元素
>>> x
[1, 2, 3, 4, 5]
>>> id(x)                              #內存地址不變
53875720
  1. 乘法運算符可以用於列表和整數相乘,表示序列重複,返回新列表。運算符=也可以用於列表元素重複,屬於原地操作。
>>> x = [1, 2, 3, 4]
>>> id(x)
54497224
>>> x = x * 2                           #元素重複,返回新列表
>>> x
[1, 2, 3, 4, 1, 2, 3, 4]
>>> id(x)                               #地址發生改變
54603912
>>> x *= 2                              #元素重複,原地進行
>>> x
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
>>> id(x)                               #地址不變
54603912
  1. 成員測試運算符in可用於測試列表中是否包含某個元素,查詢時間隨着列表長度的增加而線性增加,而同樣的操作對於集合而言則是常數級的。
>>> 3 in [1, 2, 3]
True
>>> 3 in [1, 2, '3']
False
  1. 關係運算符可以用來比較兩個列表的大小。
>>> [1, 2, 4] > [1, 2, 3, 5]    #逐個比較對應位置的元素
                                #直到某個能夠比較出大小爲止
True
>>> [1, 2, 4] == [1, 2, 3, 5]
False

五、內置函數對列表的操作

max()、min()函數用於返回列表中所有元素的最大值和最小值,
sum()函數用於返回列表中所有元素之和;
len()函數用於返回列表中元素個數,zip()函數用於將多個列表中元素重新組合爲元組並返回包含這些元組的zip對象;
enumerate()函數返回包含若干下標和值的迭代對象;
map()函數把函數映射到列表上的每個元素,filter()函數根據指定函數的返回值對列表元素進行過濾;
all()函數用來測試列表中是否所有元素都等價於True,any()用來測試列表中是否有等價於True的元素。
標準庫functools中的reduce()函數以及標準庫itertools中的compress()、groupby()、dropwhile()等大量函數也可以對列表進行操作。

>>> x = list(range(11))              #生成列表
>>> import random
>>> random.shuffle(x)                #打亂列表中元素順序
>>> x
[0, 6, 10, 9, 8, 7, 4, 5, 2, 1, 3]
>>> all(x)                           #測試是否所有元素都等價於True
False
>>> any(x)                           #測試是否存在等價於True的元素
True
>>> max(x)                           #返回最大值
10
>>> max(x, key=str)                  #按指定規則返回最大值
9
>>> min(x)
0
>>> sum(x)                    #所有元素之和
55
>>> len(x)                    #列表元素個數
11
>>> list(zip(x, [1]*11))      #多列表元素重新組合
[(0, 1), (6, 1), (10, 1), (9, 1), (8, 1), (7, 1), (4, 1), (5, 1), (2, 1), (1, 1), (3, 1)]
>>> list(zip(range(1,4)))     #zip()函數也可以用於一個序列或迭代對象
[(1,), (2,), (3,)]
>>> list(zip(['a', 'b', 'c'], [1, 2]))    #如果兩個列表不等長,以短的爲準
[('a', 1), ('b', 2)]
>>> enumerate(x)              #枚舉列表元素,返回enumerate對象
<enumerate object at 0x00000000030A9120>
>>> list(enumerate(x))        #enumerate對象可以轉換爲列表、元組、集合
[(0, 0), (1, 6), (2, 10), (3, 9), (4, 8), (5, 7), (6, 4), (7, 5), (8, 2), (9, 1), (10, 3)]




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章