1. 程式人生 > >資料型別之List列表

資料型別之List列表

list列表

1.概述:

通過前兩天的學習,我們知道變數可以儲存資料,但是一個變數只能儲存一個數據,現在有一個班級,班級有20個人,現在求班級的平均年齡。

若按照之前的方式來解決

age1 = 10
age2 = 12
...
age20 = 12
average = (age1 + age2 +...+age20)/20

在這裡,很顯然這種方法顯得很麻煩,而python提供了一種解決方案,就是使用列表,可以隨時新增和刪除其中的元素。

本質:list列表的本質是一種有序的集合

2.建立列表

語法: 列表名 = [元素1,元素2,元素3…說明:列表中的選項被稱為元素,跟string類似,下標也是從0開始計數

使用:建立列表

#建立空列表
list1 = []
#建立帶有元素的列表
list2 = [10, 20, 30, 10]
print(list2)
list3 = list(range(1,10))
list4 = [i for i in range(10)]
print(list3)
print(list4)
輸出:
[10, 20, 30, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

在列表中元素的資料型別可以不同(靈活性)

list3 = [33, "good", True, 10.32]
print(list3)
輸出:
[33
, 'good', True, 10.32]
3.列表元素的訪問
3.1 列表的取值

功能:訪問list列表中元素值

語法:列表名[索引]

list4 = [22, 33, 12, 32, 45]
#下標從0開始,最大值為len(list4)-1
print(list4[0])
輸出:
22

注意:當索引值大於len(list4)-1的時候,會出現以下錯誤:

print(list4[5])
IndexError: list index out of range

這個錯誤就是下標越界【下標超出了可表示的範圍】

3.2 列表元素的替換

功能:更改列表元素的值

語法:列表名[下標] = 值

list4 = [22, 33, 12, 32, 45]
list4[0] = "hello"
print(list4[0])
print(list4)
輸出:
hello
['hello', 33, 12, 32, 45]
4.列表操作

4.1 列表組合

語法: 列表3 = 列表1 + 列表2

list1 = [1, 2, 3]
list2 = ['hello', 'yes', 'no']
list3 = list1 + list2
print(list3)
輸出:
[1, 2, 3, 'hello', 'yes', 'no']

4.2 列表重複

語法: 列表2 = 列表1 * n

list1 = [1, 2, 3]
list2 = list1 * 2
print(list2)
輸出:
[1, 2, 3, 1, 2, 3]

4.3 判斷元素是否在列表中

語法:元素 in 列表

若存在則返回True,否則返回False

list1 = [1, 2, 3]
print(1 in list1)
輸出:
True

4.4 列表擷取

語法:列表[start: end] 表示獲取從開始下標到結束下標的所有元素[start, end)

list1 = [1, 2, 3, 'hello', 'yes', 'no']
print(list1[2:4])
#若不指定start,則預設從0開始擷取,擷取到指定位置
#若不指定end,則從指定位置開始擷取,擷取到末尾結束
輸出:
[3, 'hello']

4.5 二維列表

語法:列表 =[列表1,列表2,列表3,… ,列表n]

#建立二維列表,即列表中的元素還是列表
list1 = [[1, 2, 3],[2, 3, 4],[5, 4, 9]]

4.5 二維列表取值

語法:列表名【下標1][下標2]

注意:下標1代表第n個列表(下標從0開始),下標2代表第n個列表中的第n個元素

list1 = [[1, 2, 3],[2, 3, 4],[5, 4, 9]]
print(list1[0][0])
輸出:
1
5.列表的方法

5.1 list.append(元素/列表)

功能:在列表中末尾新增新的元素【在原本的列表中追加元素】

注意:append()中的值可以是列表也可以是普通元素

>>> list1 = [3, 4, 6]
>>> list1.append(6)
>>> print(list1)
[3, 4, 6, 6]

5.2 list.extend(列表)

功能:在列表的末尾一次性追加另外一個列表中的多個值

注意:extend()中的值只能是列表/元組[一個可迭代物件],不能是元素。

>>> list1 = [1,2,3]
>>> list2 = [3, 4,5]
>>> list1.extend(list2)
>>> print(list1)
[1, 2, 3, 3, 4, 5]

5.3 list.insert(下標值, 元素/列表)

功能:在下標處插入元素,不覆蓋原本的資料,原資料向後順延。

注意:插入的資料可以是元素也可以為列表。

>>> list1 = [1,2,3]
>>> list1.insert(1,0)
>>> print(list1)
[1, 0, 2, 3]
>>> list1.insert(1,[2, 4, 8])
>>> print(list1)
[1, [2, 4, 8], 0, 2, 3]

5.4 list.pop(下標值)

功能:移除列表中指定下標處的元素(預設移除最後一個元素),並返回移除的資料。

>>> list1 = [1, [2, 4, 8], 0, 2, 3]
>>> list1.pop()
3
>>> print(list1)
[1, [2, 4, 8], 0, 2]
>>> list1.pop(2)
0
>>> print(list1)
[1, [2, 4, 8], 2]

5.5 list.remove(元素)

功能:移除列表中的某個元素第一個匹配結果

list1 = [1, 2,3,2,4]
list1.remove(2)
print(list1)
輸出:
[1, 3, 2, 4]

5.6 list.clear()

功能:清除列表中所有的資料

>>> list1 = [1, 2, 3]
>>> list1.clear()
>>> print(list1)
[]

5.7 list.index(元素[, start】[, stop])

功能:從指定的範圍的列表中找出某個值第一匹配的索引值

若不指定範圍,則預設是整個列表。

>>> list1 = [1, 2, 3]
>>> list1.index(2)
1
>>> list1.index(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 4 is not in list

注意:若在列表中找不到這個元素,則會報錯。

5.8 list.count(元素)

功能:檢視元素在列表中出現的次數

>>> list1 = [1, 2, 3, 1]
>>> list1.count(1)
2

5.9 len(list)

功能: 獲取元素個數

>>> list1 = [1, 2, 3, 1]
>>> len(list1)
4

5.10 max(list)

語法:獲取列表中的最大值,元素是不同的資料型別時不能使用

>>> list1 = [1, 2, 3, 1]
>>> max(list1)
3

5.11 min(list)

語法:獲取列表中的最小值,元素是不同的資料型別時不能使用

>>> list1 = [1, 2, 3, 1]
>>> min(list1)
1

5.12 list.reverse()

語法: 列表倒敘,直接修改原列表,返回值為None。

>>> list1 = [1, 2, 3, 1]
>>> list1.reverse()
>>> print(list1)
[1, 3, 2, 1]

5.13 list.sort()

語法:列表排序 預設升序,元素是不同的資料型別時不能使用

>>> list1 = [1, 2, 3, 1]
>>> list1.sort()
>>> print(list1)
[1, 1, 2, 3]
#倒序
list1 = [1, 2,3,2,4]
list1.sort(reverse=False)
print(list1)
輸出:
[1, 2, 2, 3, 4]

5.14 淺拷貝

語法:list1 = [1, 2, 3]

​ list2 = list1

>>> list1 = [1, 2, 3, 1]
>>> list2 = list1
>>> print(list2)
[1, 2, 3, 1]
>>> print(id(list1))
4314476424
>>> print(id(list2))
4314476424
list1 = [1, 2,3,2,4]
list2 = list1
list2[0] = 0
print(list1)
輸出:
[0, 2, 3, 2, 4]

注意:淺拷貝為引用拷貝,類似於快捷方式。

淺拷貝中一個變數發生改變,另一個也相應發生改變,

5.15 深拷貝

語法:list1 = [1, 2, 3]

​ list2 = list1.copy()

方式2:

list2 = list1[:]

>>> list1 = [1, 2, 3, 1]
>>> list2 = list1.copy()
>>> print(list2)
[1, 2, 3, 1]
>>> print(id(list2))
4314525320
>>> print(id(list1))
4314524808
list1 = [1, 2,3,2,4]
list2 = list1[:]
print(list2)
print(id(list1))
print(id(list2))
輸出:
[1, 2, 3, 2, 4]
2485711112520
2485710239496

注意:深拷貝為記憶體拷貝,開闢了新的記憶體空間

5.16 list(元組)

功能:將元組轉為列表

>>> list1 = list((1, 2, 3, 4))
>>> print(list1)
[1, 2, 3, 4]
6.列表的遍歷

6.1 使用for迴圈遍歷列表

語法:

for 變數名 in 列表 :

​ 語句

功能:for迴圈主要用於遍歷列表

遍歷:指的是依次訪問列表中的每一個元素,獲取每個下標對應的元素值

說明:按照順序獲取列表中的每個元素,賦值給變數名,再執行語句,如此迴圈往復,直到取完列表中所有的元素為止

>>> list1 = ['hello', 78, '你好', 'good']
>>> for item in list1:
...     print(item)
... 
hello
78
你好
good

6.2 使用while迴圈遍歷列表[使用下標迴圈]

語法:

下標 = 0

while 下標 < 列表的長度:

​ 語句

​ 下標 += 1

>>> list1 = ['hello', 78, '你好', 'good']
>>> index = 0
>>> while index < len(list1):
...     print(list1[index])
...     index += 1
... 
hello
78
你好
good

6.3 同時遍歷下標與元素

語法:

for 下標,變數 in enumerate(列表)

​ 語句

>>> list1 = ['hello', 78, '你好', 'good']
>>> for index,item in enumerate(list1):
...     print(index, item)
... 
0 hello
1 78
2 你好
3 good

enumerate()[列舉]函式用於一個可遍歷的資料物件(如列表,元組或者字串)組合為一個索引序列,同時列出資料與資料下標,一般使用在for迴圈中
enumerate(obj, [start =0])
obj:一個可迭代物件
start:下標起始位置

7、List轉dict
list1=[('a',1),('b',2),('c',3)]
dict1={k:v for k,v in list1}
dict2={v:k for k,v in list1}
print(dict1)
print(dict2)
輸出:
{'a': 1, 'b': 2, 'c': 3}
{1: 'a', 2: 'b', 3: 'c'}
8、切片
8.1 一個冒號
    list1=['a','b','c','d','e']
    print('獲取全部:',list1[:])
    print('去頭去尾:',list1[1:-1])
    print('取[2,4)',list1[2:4])
    輸出:
    獲取全部: ['a', 'b', 'c', 'd', 'e']
    去頭去尾: ['b', 'c', 'd']
    取[2,4) ['c', 'd']

冒號後面沒有值則預設為list1的長度。

8.2兩個冒號

冒號後面是步長,切片的步長預設為1,不可為0。

    list1=['a','b','c','d','e']
    print('獲取全部:',list1[::])
    print('列表倒置:',list1[::-1])
    print('從下標0開始,步長為2',list1[::2])
    print('從下標1開始,步長為2',list1[1::2])
    輸出:
    獲取全部: ['a', 'b', 'c', 'd', 'e']
    列表倒置: ['e', 'd', 'c', 'b', 'a']
    從下標0開始,步長為2 ['a', 'c', 'e']
    從下標1開始,步長為2 ['b', 'd']

常用的是list1[::-1],列表倒置。