python基礎教程:list(列表)
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'] ||||| 正索引:01234 負索引:-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 --------------------------------------------------------------------------- NameErrorTraceback (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]]
Python資料結構: list(列表)
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']) --------------------------------------------------------------------------- TypeErrorTraceback (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']) --------------------------------------------------------------------------- TypeErrorTraceback (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']) --------------------------------------------------------------------------- TypeErrorTraceback (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語言的“內建函式”,這裡我們講的是列表本身的“內建方法”。函式和方法有什麼區別呢?
.
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的時候肯定會遇到很多難題,以及對於新技術的追求,這裡推薦一下我們的Python學習扣qun:784758214,這裡是python學習者聚集地!!同時,自己是一名高階python開發工程師,從基礎的python指令碼到web開發、爬蟲、django、資料探勘等,零基礎到專案實戰的資料都有整理。送給每一位python的小夥伴!每日分享一些學習的方法和需要注意的小細節