1. 程式人生 > >Python3基礎教程-第2章筆記-下

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)
>>>