Python的基本資料型別有整數,浮點數,布林,字串,它們是最基本的資料。在實際程式設計中,我們要經常組織由很多基本資料組成的集合,這些集合的不同組織方式就是:資料結構,今天講的是資料結構中的Python list(列表)。資料結構就是一些資料組合得到的“複合”資料型別。
Python內建的資料結構有:
- 列表(list)
- 元組(tuple)
- 字典(dict)
- 集合(set)
在Python語言中,以上4種資料結構和基礎資料型別(整數、浮點數等)統稱為“內建型別”(Built-in Types)。
Python list(列表)
Python list(列表),是Python中最常用的一種資料結構,它是一組用方括號括起來、逗號分隔的資料。列表的元素可以是任何型別的,但使用時通常各個元素的型別是相同的。下面的列表有5個元素,元素型別分別是字串、整數、浮點數和列表:
In [15]: list_a = ['a', 'b', 3, 8.9, [1,2]]
In [16]: list_a
Out[16]: ['a', 'b', 3, 8.9, [1, 2]]
list(列表)的索引(index)
列表就像一個叫號排隊的隊伍,從頭到尾每個元素都有一個遞增的號碼,這個號碼就是對應元素的“索引”(index)。與我們生活中不同的是,列表的第一元素的索引是0
。
In [22]: list_a[0]
Out[22]: 'a'
In [23]: list_a[1]
Out[23]: 'b'
In [24]: list_a[3]
Out[24]: 8.9
列表這個隊伍也可以從隊尾往前叫號,也就是倒序叫號,這時候索引都是負的(負索引),隊尾元素的索引s是-1,倒數第二個是-2,依次向前遞減。
In [25]: list_a[-1]
Out[25]: [1, 2]
In [26]: list_a[-2]
Out[26]: 8.9
Python列表的索引可以是正索引(從頭到尾),也可以是負索引(從尾到頭),總結為下面的關係:
列表: ['a', 'b', 'c', 'd', 'e']
| | | | |
正索引: 0 1 2 3 4
負索引: -5 -4 -3 -2 -1
通過索引我們可以訪問到某個元素,那麼我們就可以修改這個元素。沒錯,列表裡面的元素是可以被修改的,相當於你先替別人排了個隊,他來了就把你替換了。
In [31]: list_b = ['a', 'b', 'c']
In [32]: list_b[1] = 2
In [33]: list_b
Out[33]: ['a', 2, 'c']
list(列表)的切片(slicing)
通過索引,我們可以訪問list(列表)的單個元素。但有時候我們要取列表的一個片段,這就是“切片”操作。切片返回的是一個列表,可以理解為“子列表”。
切片是通過索引來實現的,比如: list_a[1:3]
,這裡索引變成兩個用冒號:
分隔,分別是切片的開始索引和結束索引,[1:3]
代表的是一個左開右閉區間,即包含左邊索引的元素,到右邊索引為止但不包括該元素。那麼list_a[1:3]
得到的是['b', 3]
:
In [27]: list_a[1:3]
Out[27]: ['b', 3]
In [28]: list_a[:3]
Out[28]: ['a', 'b', 3]
In [29]: list_a[1:]
Out[29]: ['b', 3, 8.9, [1, 2]]
In [30]: list_a[:]
Out[30]: ['a', 'b', 3, 8.9, [1, 2]]
上面例子中,切片範圍的起止索引可以是缺失的,左邊缺失就是從頭(0
)開始,右邊缺失就是後面的全部。
list運算子
列表作為Python的一種“內建型別”,它也像基本型別數字、字串那樣可以進行一些運算子的運算,如下表所示:
運算子 | 含義 | 表示式 | 結果 |
---|---|---|---|
+ |
列表合併在一起 | ['a', 'b', 'c'] + [1, 2, 3] |
['a', 'b', 'c', 1, 2, 3] |
* |
列表重複 | ['a'] * 3 |
['a', 'a', 'a'] |
in |
是否為列表元素 | 'a' in ['a', 'b'] |
True |
從頭到尾遍歷(迭代)一個list的語法是:for x in list
:
for x in [1, 2, 3]:
print(x)
刪除list(列表)
(1)刪除整個列表
In [35]: list_a = ['a', 'b', 3, 8.9, [1,2]]
In [36]: del list_a
In [37]: list_a
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-37-1dc2d082cc20> in <module>
----> 1 list_a
NameError: name 'list_a' is not defined
del
是Python的一個保留關鍵字,用於刪除(delete)物件。Python裡面的所有東西都是物件,所有del可以用於刪除變數、列表等等。
(2)刪除列表的一個或多個元素
In [41]: list_a = ['a', 'b', 3, 8.9, [1,2]]
In [42]: del list_a[0] # 刪除一個元素
In [43]: list_a
Out[43]: ['b', 3, 8.9, [1, 2]]
In [44]: del list_a[1:3] # 刪除切片
In [45]: list_a
Out[45]: ['b', [1, 2]]
list(列表)推導式
處理一個序列中的所有或部分元素並返回結果列表的一種緊湊寫法。見下面的例子:
In [50]: even = [2 * i for i in range(10)]
In [51]: even
Out[51]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
In [52]: even2 = [i for i in range(20) if i % 2 == 0]
In [53]: even2
Out[53]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
生成even的過程是把0~10之間的數字都乘以2變成偶數;
生成even2的過程是從0~20之間挑選出偶數。
這兩個都是列表推導式,並且後面的是加了if條件只處理原列表的部分元素。
list(列表)相關的內建函式
Python內建函式中有一些可以對list進行操作,它們是:
(1)len()
計算列表的長度,即計算列表元素的個數)
In [55]: len([1,2,3])
Out[55]: 3
(2)max()
返回列表元素中的最大值,列表元素必須是同一型別且可比較,比如都是數字型的,或都是字串,如果型別不統一就會報錯:
In [57]: max(['a', 'b', 'c'])
Out[57]: 'c'
In [58]: max([1,2,'a'])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-58-d6e404f692f3> in <module>
----> 1 max([1,2,'a'])
TypeError: '>' not supported between instances of 'str' and 'int'
(3)min()
返回列表元素中的最小值。元素型別要求跟max()一樣。
In [59]: min([1,2,3])
Out[59]: 1
In [60]: min(['a', 'b', 'c'])
Out[60]: 'a'
In [61]: min([1,2,'a'])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-61-c2d30ec5fffc> in <module>
----> 1 min([1,2,'a'])
TypeError: '<' not supported between instances of 'str' and 'int'
(4)sum()
計算列表所有元素的和,其元素型別必須是數值型的(整數、浮點數)
In [63]: sum([1,2,3])
Out[63]: 6
In [64]: sum([1.2, 3.2, 4.3])
Out[64]: 8.7
In [65]: sum(['a', 'b', 'c'])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-65-f2e6eb2051e3> in <module>
----> 1 sum(['a', 'b', 'c'])
TypeError: unsupported operand type(s) for +: 'int' and 'str'
(5)sorted()
返回一個排序的列表,但並不改變原列表。
In [66]: sorted([3, 9, 0, 5])
Out[66]: [0, 3, 5, 9]
In [68]: sorted(['python', 'yuanrenxue', 'good'])
Out[68]: ['good', 'python', 'yuanrenxue']
(6)list()
生成一個空列表,或把其它型別資料轉換成list。
In [69]: list()
Out[69]: []
In [70]: list('python')
Out[70]: ['p', 'y', 't', 'h', 'o', 'n']
(7)any()
只要列表中有一個元素是True就返回True。
In [72]: any([0, '', '3'])
Out[72]: True
(8)all()
只有列表所有元素為True才返回True。
In [73]: all([0, '', '3'])
Out[73]: False
In [74]: all([3, 'a', True])
Out[74]: True
list(列表)的內建方法
前面我們說的是Python語言的“內建函式”,這裡我們講的是列表本身的“內建方法”。函式和方法有什麼區別呢?
- 函式: 是一系列語句的集合,呼叫後可以返回一個或一些值。可以給它傳遞0個或多個引數,這些引數可能被用於函式內部的執行過程。
- 方法: 就是定義在類內部的函式。很明顯,方法是與某個物件關聯的。方法的呼叫方法就是在物件後面加
.
再加方法名稱。
Python中的一切都是物件,列表也不例外,那自然列表也有其自有的方法,總結為下表:
方法 | 功能 | 示例 | 結果 |
---|---|---|---|
append() |
把一個元素加到列表的尾部 | a=[1,2];a.append('a') |
a變為 [1,2,'a'] |
insert() |
把一個元素加到列表的特定位置 | a=[1,2]; a.insert(1, 'c') |
a變為:[1, 'c', 2] |
remove() |
刪除第一個出現的某元素 | a=[1,2]; a.remove(2) |
a變為:[1] |
pop() |
刪除並返回某個位置(索引)的元素 | a=[1,2];a.pop(1) |
a變為:[1] |
clear() |
清空列表 | a=[1,2];a.clear() |
a變為:[] |
index() |
返回遇到的第一個某值的索引, 如果列表不包含該值則丟擲錯誤 |
a=[1,1,1];a.index(1) |
返回0 |
count() |
返回列表中某值的個數 | a=[1,1,2];a.count(1) |
返回2 |
sort() |
對列表進行排序 | a=[3,2,1];a.sort() |
a變為:[1,2,3] |
reverse() |
將列表倒置 | a=[2,1,3];a.reverse() |
a變為:[3,1,2] |
Python list(列表)總結
列表是Python中最常用的資料結構之一,主要用於資料的順序儲存。
練習
- 熟悉對列表的各種操作。
- 比較列表和字串的相似之處。
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***