列表 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中常用的序列函數(shù):
len(seq)
返回序列的長度max(x)
返回序列的最大值元素min(x)
返回序列的最小值元素sum(x)
返回序列中所有元素的和(元素必須是數(shù)值類型)any(x)
真值測試, 如果列表中其中一個(gè)值為真值則返回True,否則返回False-
all(x)
真值測試憔涉,如果列表中所有值為真值订框,則返回True,只要有一個(gè)為假,則返回Falses = "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]