13-列表

列表

列表是Python中最基本也是最常用的數據結構之一。列表中的每個元素都被分配一個數字作為索引,用來表示該元素在列表內所排在的位置。第一個元素的索引是0,第二個索引是1,依此類推。

Python的列表是一個有序可重復的元素集合,可嵌套、迭代、修改、分片、追加、刪除,成員判斷。

從數據結構角度看,Python的列表是一個可變長度的順序存儲結構,每一個位置存放的都是對象的指針。

對于這個列表 alist = [1, “a”, [11,22], {“k1”:”v1”}],其在內存內的存儲方式是這樣的:

image.png

創(chuàng)建方式

創(chuàng)建一個列表,只要把逗號分隔的不同的數據項使用方括號括起來即可

list = []       # 定義空列表
list1 = ['physics', 1997, 2000]
list2 = [1, 2, 3]
list3 = ["a", "b", "c"]

訪問列表內的元素

列表從0開始為它的每一個元素順序創(chuàng)建下標索引,直到總長度減一 。要訪問它的某個元素,以方括號加下標值的方式即可。注意要確保索引不越界,一旦訪問的 索引超過范圍,會拋出異常。所以,一定要記得最后一個元素的索引是len(list)-1。

>>> lis = ["a", "b", "c"]
>>> lis[0]
'a'
>>> lis[1]
'b'
>>> lis[2]
'c'
>>> lis[3]
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    lis[3]
IndexError: list index out of range

修改元素的值

直接對元素進行重新賦值。

>>> lis[0]
'a'
>>> lis[0] = "d"
>>> lis[0]
'd'

刪除元素

使用del語句或者remove(),pop()方法刪除指定的元素。

>>> lis = ["a", "b", "c"]
>>> del lis[0]      # 根據索引刪除
>>> lis
['b', 'c']
>>> lis.remove("b") # 直接根據值進行刪除
>>> lis
['c']
>>> lis.pop()       # 彈出最后一個
'c'
>>> lis
[]

列表的特殊操作

語句                          結果                              描述
[1, 2, 3] + [4, 5, 6]          [1, 2, 3, 4, 5, 6]               組合兩個列表
['Hi!'] * 4                   ['Hi!', 'Hi!', 'Hi!', 'Hi!']       列表的乘法
3 in [1, 2, 3]                 True                            判斷元素是否存在于列表中
for x in [1, 2, 3]: print x,    1 2 3                           迭代列表中的每個元素

列表的常用函數

函數        作用
len(list)   返回列表元素個數,也就是獲取列表長度
max(list)   返回列表元素最大值
min(list)   返回列表元素最小值
list(seq)   將序列轉換為列表

>>> s = list((1, "a", "b", 2))
>>> s
[1, 'a', 'b', 2]
>>> max(s)          # 不能混合不同類型進行最大最小求值
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    max(s)
TypeError: '>' not supported between instances of 'str' and 'int'

排序和反轉

list.reverse()  將列表反轉
list.sort()     排序,默認升序 
如果列表內的元素全為數字,或者字母排序沒有問題。
如果字母和數字都有的情況下,排序會報錯
list.sort(reverse=True)     降序排列

切片--也叫截取

切片指的是對序列進行截取,選取序列中的某一段。

切片的語法是: list[start:end]

以冒號分割索引,start代表起點索引,end代表結束點索引。省略start表示以0開始,省略end表示到列表的結尾。注意,區(qū)間是左閉右開的!

如果提供的是負整數下標,則從列表的最后開始往頭部查找。例如-1表示最后一個元素,-3表示倒數第三個元素。

切片過程中還可以設置步長,以第二個冒號分割,例如list[3:9:2],表示每隔多少距離取一個元素。

a = [1,2,3,4,5,6,7,8]
a[2:4]      [3,4]
a[:7]       [1,2,3,4,5,6,7]
a[2:]       [3,4,5,6,7,8]
s = a[:]    復制列表
s
[1,2,3,4,5,6,7,8]
s.remove(2) 刪除2元素 并不是根據下標進行刪除的
s = [1,3,4,5,6,7,8] 

a[-1]       8
a[-5:]      [4,5,6,7,8]
a[::-1]     想當于逆序輸出 [8, 7, 6, 5, 4, 3, 2, 1]
a[1:5:2]    [2,4]

多維列表(嵌套列表)

a = [[1,2,3],[4,5,6],[7,8,9]]
a[0][1]
2
a = [[1,2,3],[4,5,6],{"k1":"v1"}]
a[2]["k1"]
v1

列表的遍歷

列表有好幾種遍歷方式:

a = [1,2,3,4,5,6]
for i in a:             # 遍歷每一個元素本身
    print(i)
for i in range(len(a)):     # 遍歷列表的下標,通過下標取值
    print(i, a[i])
x = 9
if x in a:      # 進行是否屬于列表成員的判斷。該運算速度非???。
    print("True")
else:
    print("False")

列表的內置方法

方法              作用
append(obj)     在列表末尾添加新的對象
count(obj)      統計某個元素在列表中出現的次數
extend(seq)     在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)
index(obj)      從列表中找出某個值第一個匹配項的索引位置
insert(index, obj)  將對象插入列表
pop(obj=list[-1])   移除列表中的一個元素(默認最后一個元素),并且返回該元素的值
remove(obj)      移除列表中某個值的第一個匹配項
reverse()       反向列表中元素
sort([func])     對原列表進行排序
copy()          復制列表
clear()         清空列表,等于del lis[:]

注意:其中的類似 append,insert, remove 等方法會修改列表本身,并且沒有返回值

練習

test = ["a", "b", "c", "d"]
test.append("A")
test
["a", "b", "c", "d","A"]

lis.append(['a'])
['a', 'b', 'c', ['a']]

-----------------------------------------
test.count()    并不是求列表元素個數,而是求其中一個元素出現的次數
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    lis.count()
TypeError: count() takes exactly one argument (0 given)
test.count("a")
1
lis = ['a', 'b', 'c', ['a'], ['a', 'b']]
lis.count('a')      # 會出現幾次?
1
lis.count(['a'])
1

-----------------------------------------

test.extend(["e","f"])
test
["a", "b", "c", "d","A","e","f"]

append(object) 是將一個對象作為一個整體添加到列表中,添加后的列表比原列表多一個元素,該函數的參數可以是任何類型的對象,
該函數沒有返回值     

extend(iterable) 是將一個可迭代對象中的每個元素逐個地添加到列表中,可迭代對象中有幾個元素,添加后的列表就比原列表多幾個元素,
該函數的參數必須是可迭代的對 象,改函數沒有返回值

-----------------------------------------
test
["a", "b", "c", "d","A"]

test.index("a")
0
test.index("A")
4
-----------------------------------------

test.insert(3,"C")
["a", "b", "c", "C","d","A","e","f"]

-----------------------------------------

test.pop()
test
["a", "b", "c", "C","d","A","e"]
test.pop(4)             # 根據位置彈出
d

-----------------------------------------

test.remove(3)   刪除不是根據下標進行刪除的,刪除是根據鍵值來刪除的
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    lis.remove(3)
ValueError: test.remove(x): x not in list
test.remove("e")

-----------------------------------------

test
["a", "b", "c", "C",A","f"]
test.reverse()      逆序輸出
['f', 'A', 'C', 'c', 'b', 'a']
newlist = test.copy()
newlist
['f', 'A', 'C', 'c', 'b', 'a']
newlist.clear()     清空列表
newlist
[]
test.sort()
['A', 'C', 'a', 'b', 'c', 'f']    按照ASCII字符表中數字排序的

注意:其中的類似 append,insert, remove 等方法會修改列表本身,并且沒有返回值(嚴格的說是返回None)。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容