[Python]第二章 列表和元組
文章目錄
- 2.1 序列概述(列表和元組)
- 2.2 通用的序列操作
- 2.3 列表:Python 的主力
- 2.3.1 函式list
- 2.3.2 基本的列表操作
- 2.3.3 列表方法
- 1.append(X) 用於將一個物件附加到列表末尾。
- 2.clear() 就地清空列表的內容
- 3.copy() 複製列表
- 4.count(X) 計算指定的元素在列表中出現了多少次。
- 5.extend(X) 同時將多個值附加到列表末尾
- 6.index(X.n) 在列表中查詢指定值X第n次出現的索引
- 7.insert(n,X) 將一個物件插入列表。
- 8.pop(n) 從列表刪除一個元素(預設最後一個元素),並返回這一元素
- 9.remove(X) 刪除第一個為指定值的元素
- 10.reverse() 按相反的順序排列列表中的元素
- 11.sort() 對列表就地排序 修改列表而不返回任何值
- 12.高階排序 sort的引數key(排序依據) 和reverse(是否倒序)
- 2.4 元組:不可修改的序列
資料結構:資料結構是以某種方式(如通過編號)組合起來的資料元素(如數、字元乃至其他資料結構)集合。
序列:基本資料結構,序列中的每個元素都有編號,即位置或索引,第一個元素的索引為0。
- 序列–列表和元組
- 對映-- 字典(詳見第四章)
- 集合-- set(詳見第十章)
2.1 序列概述(列表和元組)
不同在於,列表是可以修改的,而元組不可以。
序列 列表名=[元素1,元素2… …] 元組名=(元素1,元素2… …)
>>> edward = ['Edward Gumby', 42]
>>> type(a)
<class ‘list’>
序列還可包含其他序列
>>> john = ['John Smith', 50]
>>> database = [edward, john]
>>> database
[['Edward Gumby', 42], ['John Smith', 50]]
2.2 通用的序列操作
2.2.1 索引 序列名[索引號] 訪問單個元素
字串就是由字元組成的序列。序列中的所有元素都有編號——從0開始遞增。
>>> greeting = 'Hello'
>>> greeting[0]
'H'
-1是最後一個元素的位置
>>> greeting[-1]
'o'
對於字串字面量(以及其他序列字面量),可直接對其執行索引操作,無需先將其賦變數。
>>> 'Hello'[1]
'e'
>>> fourth = input('Year: ')[3]
Year: 2005
>>> fourth
'5'
列表相加+相乘*(見下文)
>>>Fruits=['apple','peach']+5*['pear']+['orange']
>>>Fruits
['apple','peach','pear','pear','pear', 'pear','pear','orange']
CASE:輸出英文格式的日期
2.2.2 切片——列表名[起始位置含:結束位置不含]
訪問特定範圍內的元素
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[3:6]
[4, 5, 6]
索引負數-n代表倒著數第n位數
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[3:-4]
[4, 5, 6]
1、絕妙的簡寫
從起始位置到最尾——列表名[起始位置含:]
>>> numbers[7:]
[8, 9, 10]
倒著數方法
>>> numbers[-3:]
[8, 9, 10]
從頭到截止位置——列表名[:結束位置不含]
>>> numbers[:3]
[1, 2, 3]
複製整個序列
>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
CASE:擷取欄位
2、 更大的步長——列表名[起始位置含:結束位置不含:步長]
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[0:10:2]
[1, 3, 5, 7, 9]
>>> numbers[::4]
[1, 5, 9]
步長是負數,表示從右往左提取
>>> numbers[::-2]
[10, 8, 6, 4, 2]
2.2.3 序列相加
>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'Hello,' + 'world!'
'Hello,world!'
>>> [1, 2, 3] +[‘world’]
[1, 2, 3, ‘world’]
但是,不同的型別序列不能拼接
>>> [1, 2, 3] + 'world!' #報錯
>>> [1, 2, 3] + (1,2,3) # 報錯
2.2.4 乘法
>>> 'python' * 5
'pythonpythonpythonpythonpython'
>>> [42] * 10
[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]
None、空列表和初始化
>>> sequence = [None] * 10
>>> sequence
[None, None, None, None, None, None, None, None, None, None]
CASE:列印方框
2.2.5 成員資格
要檢查特定的值是否包含在序列中,可使用運算子in。布林運算子,返回布林值。
>>> permissions = 'rw'
>>> 'w' in permissions
True
>>> 'x' in permissions
False
>>> users = ['mlh', 'foo', 'bar']
>>> input('Enter your user name: ') in users
Enter your user name: mlh
True
>>>A=[['as',12],['d',14]]
>>>s=['as',12]
>>>s in A
True
現在可使用運算子in來檢查指定的字串是否為另一個字串的子串。
>>> subject = '$$$ Get rich now!!! $$$'
>>> '$$$' in subject
True
CASE:輸入驗證
長度len、最小值min和最大值max
>>> numbers = [100, 34, 678]
>>> len(numbers)
3
>>> max(numbers)
678
>>> min(numbers)
34
>>> min([100, 34, 678])
34
以下呼叫max和min時指定的實參並不是序列,而直接將數作為實參。
>>> max(2, 3)
3
>>> min(9, 3, 2, 5)
2
2.3 列表:Python 的主力
2.3.1 函式list
使用字串來建立列表(也可以將元組轉化成列表)
>>> list('Hello')
['H', 'e', 'l', 'l', 'o']
>>> ‘’.join(['H', 'e', 'l', 'l', 'o'])
'Hello'
2.3.2 基本的列表操作
1.修改列表 給元素賦值 =
>>> x = [1, 1, 1]
>>> x[1] = 2
>>> x
[1, 2, 1]
2.刪除元素 del 列表名【索引號】
>>> names = ['Alice', 'Beth', 'Cecil', 'Dee-Dee', 'Earl']
>>> del names[2]
>>> names
['Alice', 'Beth', 'Dee-Dee', 'Earl']
3.給切片賦值(替換,插入、刪除)
>>> X=[1,2,3,4,5,6]
>>> X[:2]=[11,22]
>>> X
[11,22,3,4,5,6]
>>> name = list('Perl')
>>> name
['P', 'e', 'r', 'l']
>>> name[2:] = list('ar')
>>> name
['P', 'e', 'a', 'r']
通過使用切片賦值,可將切片替換為長度與其不同的序列
>>> name = list('Perl')
>>> name[1:] = list('ython')
>>> name
['P', 'y', 't', 'h', 'o', 'n']
使用切片賦值還可在不替換原有元素的情況下插入新元素——用空切片器替換
這裡的空切片器是numbers[1:1],numbers[4:0]也是
>>> numbers = [1, 5]
>>> numbers[1:1] = [2, 3, 4]
>>> numbers
[1, 2, 3, 4, 5]
取相反的措施來刪除切片——替換成空切片
>>> numbers
[1, 2, 3, 4, 5]
>>> numbers[1:4] = []
>>> numbers
[1, 5]
2.3.3 列表方法
方法是與物件(列表、數、字串等)聯絡緊密的函式。像下面這樣呼叫方法:
object.method(arguments)
1.append(X) 用於將一個物件附加到列表末尾。
>>> lst = [1, 2, 3]
>>> lst.append(4)
>>> lst
[1, 2, 3, 4]
Notice:每次只能追加一個元素或者序列,如果新增的是序列,原序列也是多一個子序列,注意與extend()的區別
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.append(b)
>>> a
[1, 2, 3, [4, 5, 6]]
2.clear() 就地清空列表的內容
>>> lst = [1, 2, 3]
>>> lst.clear()
>>> lst
[ ]
這類似於切片賦值語句lst[:] = []
3.copy() 複製列表
如果是以賦值的方式"複製",新舊列表其實質是指向同一個列表,其中一個修改,另一個也變,並未建立副本
>>> a = [1, 2, 3]
>>> b = a # b=a[:] b=list(a) 才是複製,見下文
>>> b[1] = 4
>>> a
[1, 4, 3]
用copy函式才能建立一個副本,指向兩個不同的列表
>>> a = [1, 2, 3]
>>> b = a.copy()
>>> b[1] = 4
>>> a
[1, 2, 3]
這類似於使用a[:]或list(a),它們也都複製a
>>> a = [1, 2, 3]
>>> c = list(a)
>>> c[1] = 4
>>> a
[1, 2, 3]
>>> a = [1, 2, 3]
>>> d = a[:]
>>> d[1] = 4
>>> a
[1, 2, 3]
4.count(X) 計算指定的元素在列表中出現了多少次。
>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('to')
2
>>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]]
>>> x.count(1)
2
>>> x.count([1, 2])
1
5.extend(X) 同時將多個值附加到列表末尾
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
Notice:注意與append()的區別
與拼接不同,拼接會返回一個新序列,並不是在原序列的基礎上修改
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b //extend效果:a=a+b 或者列表賦值給空切片 a[len(a):]=b
[1, 2, 3, 4, 5, 6] ///////////////////////////////////////////////////////////
>>> a
[1, 2, 3] //[1, 2, 3, 1, 2, 3]
extend()等效方法:a=a+b 或者 列表賦值給空切片 a[len(a):]=b
6.index(X.n) 在列表中查詢指定值X第n次出現的索引
>>> knights = ['We', 'are', 'the', 'knights', 'who', 'say', 'ni']
>>> knights.index('who')
4
查詢第2次的位置
>>> happy= [