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