可以做宣傳的網(wǎng)站交易鏈接
目錄
- 一、一維列表的介紹和創(chuàng)建
- 二、序列的基本操作
- 1. 索引的查詢與返回
- 2. 切片
- 3. 序列加
- 三、元素的增刪改
- 1. 添加元素
- 2. 刪除元素
- 3. 更改元素
- 四、排序
- 五、列表生成式
一、一維列表的介紹和創(chuàng)建
??列表(list
),也稱數(shù)組,是一種有序、可變、允許重復(fù)元素的組合數(shù)據(jù)結(jié)構(gòu),屬于可變序列,由方括號(hào)[]
內(nèi)、用逗號(hào)分隔的一組元素組成。
??列表可存儲(chǔ)多個(gè)元素以方便對(duì)一組數(shù)據(jù)整體操作。不同的列表的內(nèi)存地址互不相同,即id
獨(dú)立。
??列表有兩種創(chuàng)建方式:直接將目的列表賦予變量,稱為賦值創(chuàng)建;使用list()
函數(shù)將任意組合轉(zhuǎn)化為列表,稱為引用創(chuàng)建。
??下文的列表均指一維列表。
# 空列表
lst = []
lst = list()# 賦值創(chuàng)建
lst = [1, 2, 3]# 引用創(chuàng)建(字典轉(zhuǎn)列表):轉(zhuǎn)化前后元素不變
lst = list({'1': 'a', '2': 'b', '3': 'c', })print(lst, type(lst), id(lst))
[1, 2, 3] <class 'list'> 1937556730752
??列表的元素可以是任意數(shù)據(jù)類型的對(duì)象的引用,也就是一維指針。所以列表實(shí)際上是一種二維指針,用于存儲(chǔ)一維指針。
??在Python
中,通常不采用這種描述,因?yàn)?code>Python不支持指針的直接操作。但是,列表的索引可以模擬二級(jí)指針。
二、序列的基本操作
??以下操作適用于所有序列,即列表、元組和字符串,下文僅以列表為例。
1. 索引的查詢與返回
??索引描述了序列中的元素的位置,是用于訪問(wèn)元素的操作方法,分為正數(shù)索引和負(fù)數(shù)索引。
??序列中的元素從左到右的正數(shù)索引依次為0, 1, 2, ... , n
,從右到左的負(fù)數(shù)索引依次為-1, -2, ... , -n
。
??可以通過(guò)查詢索引獲取對(duì)應(yīng)元素的值。
lst = [1, 2, 3]
print(lst[0], lst[-3])
1 1
??也可以使用index()
函數(shù),通過(guò)元素的值返回對(duì)應(yīng)的正數(shù)索引。若列表存在相同的元素,只返回最小的正數(shù)索引;若列表不存在對(duì)應(yīng)的元素,報(bào)錯(cuò)ValueError
.
??index(arg1, arg2=0, arg3=len(list))
可限定索引區(qū)間:默認(rèn)步長(zhǎng)為1
,開始索引為0
,結(jié)束索引為列表長(zhǎng)度(元素個(gè)數(shù)),區(qū)間形式與range
函數(shù)相似,即左閉右開。
??若arg3
未傳遞,傳遞了負(fù)數(shù),或者傳遞了小于arg2
的值,則參數(shù)arg3
無(wú)效,函數(shù)功能為:返回索引為arg2
上的指定元素的正數(shù)索引。一般不會(huì)用到該功能。特別的,若arg2=arg3
,一定會(huì)報(bào)錯(cuò),因?yàn)樗饕齾^(qū)間為空。
lst = ['1', '2', '3', '4', '1']
# index(element):返回指定元素的索引
print(lst.index('1'))
# index(element, index):返回限定位置上的指定元素的索引
print(lst.index('1', 4))
# index(element, start, stop):返回限定位置區(qū)間上的指定元素的索引
print(lst.index('1', 1, 5))
0
4
4
2. 切片
??切片是指獲取序列中的子序列,是訪問(wèn)序列中的多個(gè)元素的一種方式,其結(jié)果是原序列片段的拷貝。
??list[start=0:stop=-1:step=1]
,就是將整數(shù)序列range(start,stop,step)
作為從原序列所取元素的索引,獲取并拷貝這些元素,然后返回一個(gè)具有新id
的子序列。
??其參數(shù)默認(rèn)值與range
類似。特別的,若start
或stop
為負(fù)數(shù)索引,則先轉(zhuǎn)化為正數(shù)索引,再遵循range
對(duì)應(yīng)。
lst = [1, 2, 3, 4, 5, 6]
print(lst[1:5:2], lst[1:-1:2])
print(id(lst), id(lst[1:5:2]))# 第一個(gè)冒號(hào)不能省略,第二個(gè)可以省略
print(lst[1:5], lst[1::2], lst[:5:2])
print(lst[1:], lst[:5], lst[::2])
[2, 4] [2, 4]
1383891593536 1383891563392[2, 3, 4, 5] [2, 4, 6] [1, 3, 5]
[2, 3, 4, 5, 6] [1, 2, 3, 4, 5] [1, 3, 5]
3. 序列加
??同類型的序列之間可以進(jìn)行序列加運(yùn)算+
,即:將后一個(gè)序列的元素依次添加到前一個(gè)序列里。
lst = list([1, 2])
print(lst + lst)
[1, 2, 1, 2]
三、元素的增刪改
1. 添加元素
append(element)
函數(shù):在列表末尾添加一個(gè)元素。extend(iterable)
函數(shù):在列表末尾依次添加一個(gè)組合內(nèi)的元素。insert(index, element)
函數(shù):在指定索引插入一個(gè)元素,后續(xù)元素索引+1
.
??上述的函數(shù)沒(méi)有返回值,也就是說(shuō)它們的操作是在原列表上進(jìn)行的,但列表的id
仍會(huì)改變。
??序列加賦值運(yùn)算+=
可以替代extend()
函數(shù),但列表沒(méi)有被分配-=
運(yùn)算。
lst = list([1, 2])
# 不能將組合內(nèi)的元素加入列表
lst.append([3])
print(lst)# 集合是無(wú)序組合,添加次序遵循特殊的哈希映射
lst.extend({5, 4})
print(lst)# 也可以簡(jiǎn)化為賦值運(yùn)算
lst += (7, 8) # 元組,一種序列,屬于組合類型
print(lst)# 負(fù)數(shù)索引視為正數(shù)索引輸入
lst.insert(-7, '0')
print(lst)
[1, 2, [3]]
[1, 2, [3], 4, 5]
[1, 2, [3], 4, 5, 7, 8]
['0', 1, 2, [3], 4, 5, 7, 8]
2. 刪除元素
remove(element)
函數(shù):刪除一個(gè)指定元素,若存在重復(fù)元素,取最小正數(shù)索引。pop(index=-1)
函數(shù):刪除一個(gè)指定索引上的元素,參數(shù)默認(rèn)值為-1
.clear()
函數(shù):清空列表中的所有元素。del
語(yǔ)句:刪除一個(gè)指定索引上的元素,也可以刪除指定切片范圍內(nèi)的元素,甚至刪除列表本身。
lst = list([1, 2, 3, 4, 5])
lst.remove(5)
print(lst)lst.pop(0)
print(lst)
lst.pop()
print(lst)lst.clear()
print(lst)lst = list([1, 2, 3, 4, 5])
del lst[0]
print(lst)del lst[1:]
print(lst)del lst
print(lst)
[1, 2, 3, 4]
[2, 3, 4]
[2, 3]
[][2, 3, 4, 5]
[2]
NameError: name 'lst' is not defined.
3. 更改元素
??列表元素的更改主要通過(guò)索引查詢和切片替換,它們的功能與上述的添加和刪除有所重疊。
??索引查詢不僅能獲取指定索引上的元素的值,也可以對(duì)它進(jìn)行修改;切片替換可將切片內(nèi)的元素依次替換為一個(gè)組合內(nèi)的元素。當(dāng)切片步長(zhǎng)為1
時(shí),組合的元素?cái)?shù)量不受限制;否則,切片的元素個(gè)數(shù)須等于組合的元素個(gè)數(shù)。
lst = list([1, 2, 3, 4, 5])
# 逐個(gè)修改
lst[0] = 0
print(lst)# 批量修改
lst[1:3] = [10, 20, 30, 40]
print(lst)# 批量刪除
lst[1:5] = []
print(lst)# 跳躍替換
lst[::2] = 'ab'
print(lst)
[0, 2, 3, 4, 5]
[0, 10, 20, 30, 40, 4, 5]
[0, 4, 5]
['a', 4, 'b']
四、排序
??sort(reverse=False)
是一個(gè)無(wú)返回值函數(shù),參數(shù)默認(rèn)值為升序排列,可以對(duì)列表內(nèi)的元素進(jìn)行排序。對(duì)于基本數(shù)據(jù)類型的元素,數(shù)值類型可以互相排序,字符串不能與數(shù)值排序。
??sorted(reverse=False)
與前者的區(qū)別在于,它可以對(duì)任意組合內(nèi)的元素進(jìn)行排序,并返回一個(gè)排序后的列表。
??對(duì)于值的大小相同,但類型不同的數(shù)值,遵循int < float < bool
。
??字符串的比較將在后續(xù)篇章說(shuō)明,排序算法則在進(jìn)階篇中展開。
lst = [0, 1, 1.0, True, 2]
# 升序排列
lst.sort()
print(lst)# 降序排列
print(sorted(lst, reverse=True))
[0, 1, 1.0, True, 2]
[2, 1, 1.0, True, 0]
五、列表生成式
??生成式是for
遍歷的縮簡(jiǎn)語(yǔ)句,用于快速生成組合,格式為:[運(yùn)算式 for
變量 in
可迭代對(duì)象],即:遍歷可迭代對(duì)象,將其每個(gè)元素經(jīng)運(yùn)算后的結(jié)果加入所生成的組合中。
print([i**2 for i in range(5)])
[0, 1, 4, 9, 16]