列表:用于存儲任意數目、任意類型的數據集合。
列表是內置可變序列,是包含多個元素的有序連續的內存空間。
特點: 有序, 可變, 中括號[]
列表的標準語法格式:a = [10,20,30,40] . 其中,10,20,30,40這些稱為:列表a的元素。
注意:
字符串和列表都是序列類型,一個字符串是一個字符序列,一個列表是任何元素的序列。
前面學習的很多字符串的方法,在列表中也有類似的用法,幾乎一模一樣。
操作
列表的創建
使用list()可以將任何可迭代的數據轉化成列表
range()創建整數列表
推導式生成列表
列表:用于存儲任意數目、任意類型的數據集合
list()創建
import random
a = [10086, 10010, 10000, "中國移動", "中國聯通", "中國電信"]
b = [] # 創建一個空列表對象
print(a)
print(b)
list()創建
使用list()可以將任何可迭代的數據轉化成列表
a = list()
b = list(range(9))
c = list("中國移動,10086")
print(a)
print(b) # [0, 1, 2, 3, 4, 5, 6, 7, 8]
print(c) # ['中', '國', '移', '動', ',', '1', '0', '0', '8', '6']
range()創建整數列表
range()可以幫助我們非常方便的創建整數列表,這在開發中極其有用. 語法格式為:range([start,] end [,step])
start參數:可選,表示起始數字。默認是0
end參數:必選,表示結尾數字
step參數:可選,表示步長,默認為1
a = list(range(3, 15, 2)) # 結果:[3, 5, 7, 9,11, 13]
b = list(range(15, 9, -1)) # 結果:[15, 14, 13,12, 11, 10]
c = list(range(3, -4, -1)) # 結果:[3, 2, 1, 0,-1, -2, -3]
print(a, b, c)
推導式生成列表
使用列表推導式可以非常方便的創建列表,在開發中經常使用
a = [x * 2 for x in range(5)]
#通過if過濾元素[0, 18, 36, 54, 72, 90, 108, 126, 144, 162, 180, 198]
b = [x * 2 for x in range(100) if x % 9 == 0]
print(a, b)
列表的新增
append()方法( 速度最快, 推薦使用 )
+運算符操作 ( 生成新對象 )
extend()方法 ( 尾插, 不生成新對象 )
insert()插入元素 ( 插入到指定位置, 慎用 )
使用乘法擴展列表,生成一個新列表,新列表元素是原列表元素的多次重復
列表元素的增加
1. append()方法 原地修改列表對象,是真正的列表尾部添加新的元素,速度最快,推薦使用
a = [20, 40] # 此列表創建可以重寫為列表文字
a.append(80)
print(a) # 結果:[20, 40, 80]
2. +運算符操作 并不是真正的尾部添加元素,而是創建新的列表對象;將原列表的元素和新列表的元素依次復制到新的列表對象中
a = [20, 40]
print("測試第一次時對象的引用: ", id(a))
a = a + [50]
print("測試第二次時對象的引用: ", id(a)) # 兩次地址不一樣,創建了新的對象
3. extend()方法 將目標列表的所有元素添加到本列表的尾部,屬于原地操作,不創建新的列表對象
a = [20, 40]
print(id(a))
b = [50, 60]
a.extend(b) # 原對象修改
print(id(a), a)
a = a + b # 產生新對象
print(id(a), a)
4. insert()插入元素
使用 insert() 方法可以將指定的元素插入到列表對象的任意制定位置.
這樣會讓插入位置后面所有的元素進行移動,會影響處理速度. 涉及大量元素時,盡量避免使用。
a = [10, 20, 30]
a.insert(2, 100) # 在2號下標位置(起點為0)放入100
print(a) # 結果:[10, 20, 100, 30]
5. 乘法擴展 使用乘法擴展列表,生成一個新列表,新列表元素是原列表元素的多次重復
a = ["托尼斯塔克", "愛你三千遍"]
d = a * 30 # 3000是在太多了...
print(a)
print(d)
列表的刪除:
del() 刪除列表指定位置的元素
pop()刪除并返回指定位置元素
刪除首次出現的指定元素,若不存在該元素拋出異常
列表元素的刪除
1. del刪除, 刪除列表指定位置的元素
a = [100, 200, 888, 300, 400]
del a[2]
print(a) # 結果:[100,200,300,400]
2. pop()方法
pop()刪除并返回指定位置元素,如果未指定位置則默認操作列表最后一個元素
a = [10, 20, 30, 40, 50]
b1 = a.pop() # 結果:b1=50
print(a, b1) # 結果:[10, 20, 30, 40] 50
b2 = a.pop(1)
print(a, b2) # 結果:[10, 30, 40],20
3.remove()方法
刪除首次出現的指定元素,若不存在該元素拋出異常
a = [10, 20, 30, 40, 50, 20, 30, 20, 30]
a.remove(20) # [10, 30, 40, 50, 20, 30, 20,30]
print(a)
a.remove(90) # ValueError: list.remove(x): x not in list
復制列表所有的元素到新列表對象:
復制列表所有的元素到新列表對象
只是將list2也指向了列表對象,也就是說list2和list2持有地址值是相同的. 列表對象本身的元素并沒有復制。
list1 = [30, 40, 50]
list2 = list1
print(list2)
訪問 & 計數
訪問:
通過索引直接訪問元素
index()獲得指定元素在列表中首次出現的索引
列表元素訪問和計數
1. 通過索引直接訪問元素
我們可以通過索引直接訪問元素。索引的區間在 [0, 列表長度-1] 這個范圍。超過這個范圍則會拋出異常。
a = [10, 20, 30, 40, 50, 20, 30, 20, 30]
print(a[2]) # 結果:30
print(a[10]) # 報錯:IndexError: list index out of range
2. index()獲得指定元素在列表中首次出現的索引
index() 可以獲取指定元素首次出現的索引位置。語法是: index(value,[start, [end]]) 。其中, start 和 end 指定了搜索的范圍。
print(a.index(20)) # 1
print(a.index(20, 3)) # 5
print(a.index(30, 5, 7)) # 6
print(a[a.index(20)])
print(a[a.index(20, 3)])
print(a[a.index(30, 5, 7)])
計數:
count()獲得指定元素在列表中出現的次數
len()返回列表長度,即列表中包含元素的個數
3. count()獲得指定元素在列表中出現的次數
print("20在列表中出現的次數:", a.count(20))
4. len()返回列表長度,即列表中包含元素的個數。
a = [10, 20, 30]
print(len(a))
列表的遍歷:
列表的遍歷
print("測試列表的遍歷")
a = [10, 20, 30, 40]
for o in a:
print(o)
常見用法
列表常見方法如下圖所示, 下面我們對部分用法進行操作
切片操作:
切片操作
類似字符串的切片操作,對于列表的切片操作和字符串類似.
標準格式為:[起始偏移量start:終止偏移量end[:步長step]]
切片操作時,起始偏移量和終止偏移量不在 [0,字符串長度-1] 這個范圍,也不會報錯。
起始偏移量 小于0 則會當做 0 ,終止偏移量 大于 “長度-1” 會被當成 ”長度-1”
print([10, 20, 30, 40][1:30])
成員資格判斷:
成員資格判斷
判斷列表中是否存在指定的元素,我們可以使用 count() 方法,返回0則表示不存在,返回大于0則表示存在
但是,一般我們會使用更加簡潔的 in 關鍵字來判斷,直接返回 True 或 False
a = [10, 20, 30, 40, 50, 20, 30, 20, 30]
print(20 in a)
print(20 not in a)
print(60 not in a)
列表排序:
sort(): 修改原列表,不建新列表的排序
sort(): 建新列表的排序
reversed(): 返回迭代器
列表排序
1.修改原列表,不建新列表的排序
sort() 默認升序, 參數 reverse 代表降序
a = [2, 3, 1, 5, 4]
print(id(a))
print(a.sort())
print(a)
a.sort(reverse=True)
print(a)
random.shuffle(a) # 打亂順序
print(a)
2. 建新列表的排序
我們也可以通過內置函數sorted()進行排序,這個方法返回新列表,不對原列表做修改。
a = [20, 10, 30, 40]
print(id(a))
b = sorted(a)
c = sorted(a, reverse=True)
print(b, c)
3. reversed()返回迭代器
內置函數reversed()也支持進行逆序排列,與列表對象reverse()方法不同的是,
內置函數reversed()不對原列表做任何修改,只是返回一個逆序排列的迭代器對象
a = [20, 10, 30, 40]
b = reversed(a)
print(type(c))
print(list(c))
關于reversed()
我們打印輸出c發現提示是:list_reverseiterator。也就是一個迭代對象。
同時,我們使用list(c)進行輸出,發現只能使用一次。
第一次輸出了元素,第二次為空。那是因為迭代對象在第一次時已經遍歷結束了,第二次不能再使用。
max, min 和 sum
max, min用于返回列表中最大和最小值
sum 用于統計列表中各元素的和
列表相關的其他內置函數匯總
1. max和min
a = [3, 10, 20, 15, 9]
print(max(a))
print(min(a))
2. sum
print(sum(a))
多維列表
二維列表
一維列表可以幫助我們存儲一維、線性的數據。
二維列表可以幫助我們存儲二維、表格的數據。例如下表的數據:
隊名 第幾季 勝者
才子隊 1 比爾
九頭蛇隊 2 皮爾斯
巨亨隊 3 卡羅爾
二維表的訪問方式:
a = [
["才子隊", 1, "比爾"],
["九頭蛇隊", 2, "皮爾斯"],
["巨亨隊", 3, "卡羅爾"],
]
輸出單個元素
print(a[0][0], a[1][1], a[1][2])
嵌套循環打印二維列表所有的數據
for m in range(3):
for n in range(3):
print(a[m][n], end=" ")
print()
-
編程
+關注
關注
88文章
3595瀏覽量
93602 -
序列
+關注
關注
0文章
70瀏覽量
19547 -
python
+關注
關注
56文章
4782瀏覽量
84463
發布評論請先 登錄
相關推薦
評論