[TOC]
列表相當于Java中的數組,python
中的列表可以存儲任意類型的元素,同時列表會根據存儲內容動態分配內存。
1 創建列表
1.1 使用[]
創建列表
mylist = ["hello", "word", 98]
print(mylist) # ['hello', 'word', 98]
1.2 使用內置函數list()
創建列表
mylist2 = list(["hello", "word", 2022])
print(mylist2) # ['hello', 'word', 2022]
2 查詢元素
2.1 index()
函數
2.1.1 如果列表有多個重復元素,index()
只返回第一個元素的索引。
mylist = ["hello", "word", 98, "hello"]
print(mylist.index("hello")) # 0
2.1.2 如果列表中沒有此元素,則會拋出異常。
mylist = ["hello", "word", 98, "hello"]
print(mylist.index("python"))
拋出異常:
Traceback (most recent call last):
File "D:\pythonStudy\fistproject\demo11.py", line 3, in <module>
print(mylist.index("python"))
ValueError: 'python' is not in list
2.1.3 可以指定查詢位置。
使用index(obj, start, end)
查詢元素位置,從start
到end
前一位,不包括end
位置。
mylist = ["hello", "word", 98, "hello"]
print(mylist.index("hello", 1, 4)) # 3
可以看見,查詢的范圍是:"word", 98, "hello"
。
2.2 獲取指定索引位置的元素
和Java
類型,但是要注意一點,python
中索引可以是負數:
- 正向索引:元素從
0
到N-1
- 逆向索引:元素從
-N
到-1
mylist = ["hello", "word", 98, "python"]
# 正向索引
print(mylist[3]) # python
# 逆向索引
print(mylist[-1]) # python
2.3 列表的切片
列表的切片就是列表的拷貝語法為列表名[start: stop: step]
,其中,不包含stop
的元素。
- 切片后的列表,是新的列表,和原列表的ID不一樣
- 切片的范圍:
[start, stop)
- 步長
step
默認為1 -
step
為正數時,從start
開始往后切片:-
[: stop: step]
:切片的第一個元素默認是列表的第一個元素 -
[start: : step]
:切片的最后一個元素默認是列表的最后一個元素
-
-
step
為負數時,從start
開始往前切片:-
[: stop: step]
:切片的第一個元素默認是列表的最后一個元素 -
[start: : step]
:切片的最后一個元素默認是列表的第一個元素
-
2.3.1 切片使用和切片列表地址改變
mylist = [10, 20, 30, 40, 50, 60, 70, 80]
# 切片從index為1到index為4
list1 = mylist[1: 5: 1]
print(list1) # [20, 30, 40, 50]
# 地址改變
print("原列表地址:", id(mylist)) # 原列表地址: 2577983402944
print("新列表地址:", id(list1)) # 新列表地址: 2577983487232
2.3.2 默認start
和默認stop
和改變step
mylist = [10, 20, 30, 40, 50, 60, 70, 80]
# 默認start
list1 = mylist[: 5: 1]
print(list1) # [10, 20, 30, 40, 50]
# 默認stop
list1 = mylist[1:: 1]
print(list1) # [20, 30, 40, 50, 60, 70, 80]
# 改變step
list1 = mylist[:: 2]
print(list1) # [10, 30, 50, 70]
2.3.3 step
為正數時
mylist = [10, 20, 30, 40, 50, 60, 70, 80]
# step為正數
list1 = mylist[:: 1]
print(list1) # [10, 20, 30, 40, 50, 60, 70, 80]
2.3.4 step
為負數時
mylist = [10, 20, 30, 40, 50, 60, 70, 80]
# step為正數
list1 = mylist[:: -1]
print(list1) # [80, 70, 60, 50, 40, 30, 20, 10]
2.4 列表元素的判斷和遍歷
判斷使用in
和not in
進行判斷。
mylist = [10, 20, 30, 40, 50, 60, 70, 80]
# 元素的判斷
print(50 in mylist) # True
print(100 in mylist) # False
print(100 not in mylist) # True
# 元素的遍歷
for item in mylist:
if item == 50:
break
3 列表增加元素
3.1 append()
append()
函數是往列表的末尾增加一個元素。
mylist = ["hello", "world", 2022]
mylist.append(100)
print(mylist) # ['hello', 'world', 2022, 100]
3.2 extend()
extend()
函數是將其他列表元素添加到列表中。
list1 = ["python", "java", 2033]
# append是將list1作為一個元素,添加到mylist中
mylist = ["hello", "world", 2022]
mylist.append(list1)
print(mylist) # ['hello', 'world', 2022, ['python', 'java', 2033]]
# extend是將list1的所有元素,依次添加到mylist中
mylist = ["hello", "world", 2022]
mylist.extend(list1)
print(mylist) # ['hello', 'world', 2022, 'python', 'java', 2033]
3.3 insert()
insert()
函數是在任意位置插入一個元素。
mylist = ["hello", "world", 2022]
mylist.insert(1, "New OBJ")
print(mylist) # ['hello', 'New OBJ', 'world', 2022]
3.4 切片
切片是將從start
到end
前一位的元素全部移除,并插入新列表的所有元素。
mylist = [10, 20, 30, 40, 50, 60, 70, 80]
mylist2 = ["python", "c++", "java"]
# 將mylist從index為1 到 index為3之前 的所有元素(20, 30)移除,并在這個位置插入mylist2
mylist[1:3] = mylist2
print(mylist) # [10, 'python', 'c++', 'java', 40, 50, 60, 70, 80]
4 列表的刪除操作
4.1 remove()
remove()
是刪除一個元素,但是要注意:
- 如果有多個重復元素,則只刪除第一個
- 如果列表中沒有該元素,則拋出異常
mylist = [10, 20, 30, 10, 20, 30]
mylist.remove(30)
print(mylist) # [10, 20, 10, 20, 30]
# 拋出異常
# mylist.remove(100) ValueError: list.remove(x): x not in list
4.2 pop()
pop()
是刪除某個索引的元素,同Java
中的remove()
。
mylist = [10, 20, 30, 10, 20, 30]
mylist.pop(1)
print(mylist) # [10, 30, 10, 20, 30]
4.3 切片
要注意的是,切片會產生一個新的列表。
mylist = [10, 20, 30, 10, 20, 30]
newList = mylist[1:3]
print(newList) # [20, 30]
print("原ID:", id(mylist)) # 原ID: 1988783109056
print("新ID:", id(newList)) # 新ID: 1988783193344
4.4 clear()
clear()
是清空列表的意思。
mylist = [10, 20, 30, 10, 20, 30]
mylist.clear()
print(mylist) # []
4.5 del
del
是刪除列表的意思,刪除后,此列表就不會存在。
mylist = [10, 20, 30, 10, 20, 30]
print(mylist) # [10, 20, 30, 10, 20, 30]
del mylist
# 報錯
# print(mylist) NameError: name 'mylist' is not defined. Did you mean: 'list'?
5 列表元素的修改
列表元素的修改有直接修改和切片兩種方式。
mylist = [10, 100, 30, 40, 50, 60]
# 直接修改
mylist[1] = 20
print(mylist) # [10, 20, 30, 40, 50, 60]
# 切片 將mylist的從index為1到index為3之前的所有元素(20, 30)刪除,插入新的元素
mylist[1:3] = [300, 400, 500]
print(mylist) # [10, 300, 400, 500, 40, 50, 60]
6 列表排序
列表排序通過以下兩種方式進行:
-
sort()
函數:排序原列表,不生成新的列表; - 內置函數
sorted()
:生成新的排序列表,原列表不發生改變。
默認排序是升序,同時,可以指定reserve=True
來進行降序排序。
mylist = [23, 38, 29, 19, 88, 64]
print(mylist) # [23, 38, 29, 19, 88, 64]
mylist.sort()
print(mylist) # [19, 23, 29, 38, 64, 88]
# 降序排序
mylist.sort(reverse=True)
print(mylist) # [88, 64, 38, 29, 23, 19]
# 使用內置函數
mylist = [23, 38, 29, 19, 88, 64]
newList = sorted(mylist, reverse=False)
print(mylist) # [23, 38, 29, 19, 88, 64] 原列表不發生改變
print(newList) # [19, 23, 29, 38, 64, 88]
7 列表生成式
列表生成式的公式為:[ 表達式 for i in range(1, 10) ]
舉例:
mylist = [i for i in range(1, 5)]
print(mylist) # [1, 2, 3, 4]
# 表達式 生成10以內的偶數列表
mylist = [i*2 for i in range(1, 5)]
print(mylist) # [2, 4, 6, 8]