Python3基礎教程-第2章筆記-下
1、列表:python的”苦力”
(1)list函式: 適用於所有型別的序列
>>> list('hello') ['h', 'e', 'l', 'l', 'o'] >>>
(1)基本的列表操作:元素賦值、元素刪除、分片賦值、列表方法
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)分片賦值:
一次為多個元素賦值
>>> 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,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] #這個與del numebers[1:4]是一樣的
(2)列表方法
方法:與某些物件有緊密聯絡的函式,物件可能是列表、數字,也可能是字串或者其他型別的物件
呼叫方式:物件.方法(引數)
1)append:用於在列表末尾追加新的物件,直接修改原表!!而不是返回一個修改過的表
>>> lst = [1,2,3] >>> lst.append(4) >>> lst [1, 2, 3, 4] >>>
2)count:統計某個元素在列表中出現的次數
>>> ['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 >>>
3)extend:追加另一個序列中的多個值,用新列表擴充套件原列表
>>> a = [1,2,3] >>> b = [4,5,6] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6] >>>
*extend與連線+的區別:extend修改列表,連線返回全新的列表
>>> a = [1,2,3] >>> b = [4,5,6] >>> a + b [1, 2, 3, 4, 5, 6] >>> a [1, 2, 3] >>>
4)index:從列表中找出某個值第一個匹配項的索引位置
>>> knights = ['we','are','the','knights','who','say','ni'] >>> knights.index('who') 4 >>> knights,index('herring') Traceback (most recent call last): File "<pyshell#27>", line 1, in <module> knights,index('herring') NameError: name 'index' is not defined >>>
5)insert:將物件插入到列表中
>>> numbers = [1,2,3,4,5,6,7] >>> numbers.insert(3,'four') >>> numbers = [1,2,3,5,6,7] >>> numbers.insert(3,'four') >>> numbers [1, 2, 3, 'four', 5, 6, 7] >>>
6)pop:移除列表中的一個元素(預設最後一個),並返回該元素的值
pop是唯一一個既能修改列表又返回元素值的列表方法
>>> x = [1,2,3] >>> x.pop() 3 >>> x [1, 2] >>> x.pop(0) 1 >>> x [2] >>>
棧:資料結構,出棧入棧,‘後進先出’
*append代替進棧
>>> x = [1,2,3] >>> x.append(x.pop()) >>> x [1, 2, 3] >>>
7)remove:移除列表中某個值的第一個匹配項
>>> x= ['to','be','or','not','to','be'] >>> x.remove('be') >>> x ['to', 'or', 'not', 'to', 'be'] >>> x.remove('bee') Traceback (most recent call last): File "<pyshell#44>", line 1, in <module> x.remove('bee') ValueError: list.remove(x): x not in list >>>
*remove只改變列表,沒有返回值,與pop相反
8)reverse:將列表中的元素反向存放
>>> x = [1,2,3] >>> x.reverse() >>> x [3, 2, 1] >>>
*反向迭代?
9)sort:在原位置對列表進行排序,”原位置排序”即改變原來的列表,按一定順序排列
>>> x = [4,6,2,1,7,9] >>> x.sort() >>> x [1, 2, 4, 6, 7, 9] >>>
錯誤示範:
>>> x = [4,6,2,1,7,9] >>> y = x.sort()#don't do this >>> print (y) None
正確示範:
>>> x = [4,6,2,1,7,9] >>> y = x[:]#呼叫x[:]是得到了包含x所有元素的分片(副本) >>> y.sort() >>> x [4, 6, 2, 1, 7, 9] >>> y [1, 2, 4, 6, 7, 9] >>>
不能直接將x賦值給y,因為這樣x和y指向同一個列表
>>> y = x >>> y.sort() >>> x [1, 2, 4, 6, 7, 9] >>> y [1, 2, 4, 6, 7, 9] >>>
*sorted函式:獲取已排序列表副本
>>> x = [4,6,2,1,7,9] >>> y = sorted(x) >>> x [4, 6, 2, 1, 7, 9] >>> y [1, 2, 4, 6, 7, 9]
sorted函式可用於任何序列,卻總是隻返回一個列表
>>> sorted('python') ['h', 'n', 'o', 'p', 't', 'y']
10)高階排序:
compare(x,y):比較函式)(py.3沒有該函式模組)
x<y,返回負數
x>y,返回正數
x=y,返回0
*python 3.4.3 的版本中已經沒有cmp函式,被operator模組代替,在互動模式下使用時,需要匯入模組。
在沒有匯入模組情況下,會出現下面的情況:
>>> cmp(42,32) Traceback (most recent call last): File "<pyshell#12>", line 1, in <module> cmp(42,32) NameError: name 'cmp' is not defined
*sort方法另外兩個可選引數-key和reverse
關鍵字引數:
(1)key引數
#根據元素的長度進行排序,以len作為鍵函式
>>> x = ['aardvark','abalone','acme','add','aerate'] >>> x.sort(key=len) >>> x ['add', 'acme', 'aerate', 'abalone', 'aardvark']
(2)reverse引數:簡單的布林值(true or false),用以指明是否要進行反向排序
>>> x = [4,6,2,1,7,9] >>> x.sort(reverse=True) >>> x [9, 7, 6, 4, 2, 1] >>>
2、元組:不可變序列
元組:序列,與列表一樣,但不可修改
語法建立:逗號隔開值,即自動建立元組
>>> 1,2,3 (1, 2, 3) >>>
元組大部分時候是通過括號括起來的
>>> (1,2,3) (1, 2, 3) >>>
一個值的元組——必須加個逗號,即使只有一個值
>>> 42 42
>>> (42)
42
>>> 42, (42,) >>> (42,) (42,) >>>
#1)後兩個為長度為1的元組,前兩個非元組;2)逗號很重要,只新增括號沒有逗號也不會成為元組的
*逗號能夠徹底改變表示式的值,如下,
>>> 3*(40+2) 126 >>> 3*(40+2,) (42, 42, 42) >>>
1)tuple函式
tuple:功能基本同list,以一個序列作為函式並把它轉換為元組,如果引數就是元組,那麼該引數就會被原樣返回
>>> tuple([1,2,3]) (1, 2, 3) >>> tuple('abc') ('a', 'b', 'c') >>> tuple((1,2,3)) (1, 2, 3)
2)基本元組操作
*元祖的分片還是分片,就像列表的分片還是列表一樣
>>> x = 1,2,3 >>> x[1] 2 >>> x[0:2] (1, 2) >>>