亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

?? ??? ??
Python是什么? Python 3 教程 Python3 基礎(chǔ)語(yǔ)法 編碼 Python3 基本數(shù)據(jù)類型 Python解釋器 Python 注釋 Python 數(shù)字運(yùn)算 Python 字符串 Python 列表 Python 編程第一步 Python 條件控制 Python 循環(huán) Python 函數(shù) Python 數(shù)據(jù)結(jié)構(gòu) Python 模塊 Python 輸入和輸出 Python 錯(cuò)誤和異常 Python 類 Python 標(biāo)準(zhǔn)庫(kù)概覽 Python Hello World 實(shí)例 Python 數(shù)字求和 Python 平方根 Python 二次方程 Python 計(jì)算三角形的面積 Python 隨機(jī)數(shù)生成 Python 攝氏溫度轉(zhuǎn)華氏溫度 Python 交換變量 Python if 語(yǔ)句 Python 判斷字符串是否為數(shù)字 Python 判斷奇數(shù)偶數(shù) Python 判斷閏年 Python 獲取最大值函數(shù) Python 質(zhì)數(shù)判斷 Python 階乘實(shí)例 Python 九九乘法表 Python 斐波那契數(shù)列 Python 阿姆斯特朗數(shù) Python 十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制 Python ASCII碼與字符相互轉(zhuǎn)換 Python 最大公約數(shù)算法 Python 最小公倍數(shù)算法 Python 簡(jiǎn)單計(jì)算器實(shí)現(xiàn) Python 生成日歷 Python 使用遞歸斐波那契數(shù)列 Python 文件 IO Python 字符串判斷 Python 字符串大小寫轉(zhuǎn)換 Python 計(jì)算每個(gè)月天數(shù) Python 獲取昨天日期 Python list 常用操作 Python3 實(shí)例
??

Python 數(shù)據(jù)結(jié)構(gòu)


本章節(jié)我們主要結(jié)合前面所學(xué)的知識(shí)點(diǎn)來介紹Python數(shù)據(jù)結(jié)構(gòu)。


列表

Python中列表是可變的,這是它區(qū)別于字符串和元組的最重要的特點(diǎn),一句話概括即:列表可以修改,而字符串和元組不能。

以下是 Python 中列表的方法:

方法 描述
list.append(x) 把一個(gè)元素添加到列表的結(jié)尾,相當(dāng)于 a[len(a):] = [x]。
list.extend(L) 通過添加指定列表的所有元素來擴(kuò)充列表,相當(dāng)于 a[len(a):] = L。
list.insert(i, x) 在指定位置插入一個(gè)元素。第一個(gè)參數(shù)是準(zhǔn)備插入到其前面的那個(gè)元素的索引,例如 a.insert(0, x) 會(huì)插入到整個(gè)列表之前,而 a.insert(len(a), x) 相當(dāng)于 a.append(x) 。
list.remove(x) 刪除列表中值為 x 的第一個(gè)元素。如果沒有這樣的元素,就會(huì)返回一個(gè)錯(cuò)誤。
list.pop([i]) 從列表的指定位置刪除元素,并將其返回。如果沒有指定索引,a.pop()返回最后一個(gè)元素。元素隨即從列表中被刪除。(方法中 i 兩邊的方括號(hào)表示這個(gè)參數(shù)是可選的,而不是要求你輸入一對(duì)方括號(hào),你會(huì)經(jīng)常在 Python 庫(kù)參考手冊(cè)中遇到這樣的標(biāo)記。)
list.clear() 移除列表中的所有項(xiàng),等于del a[:]。
list.index(x) 返回列表中第一個(gè)值為 x 的元素的索引。如果沒有匹配的元素就會(huì)返回一個(gè)錯(cuò)誤。
list.count(x) 返回 x 在列表中出現(xiàn)的次數(shù)。
list.sort() 對(duì)列表中的元素進(jìn)行排序。
list.reverse() 倒排列表中的元素。
list.copy() 返回列表的淺復(fù)制,等于a[:]。

下面示例演示了列表的大部分方法:

>>> a = [66.25, 333, 333, 1, 1234.5]
>>> print(a.count(333), a.count(66.25), a.count('x'))
2 1 0
>>> a.insert(2, -1)
>>> a.append(333)
>>> a
[66.25, 333, -1, 333, 1, 1234.5, 333]
>>> a.index(333)
1
>>> a.remove(333)
>>> a
[66.25, -1, 333, 1, 1234.5, 333]
>>> a.reverse()
>>> a
[333, 1234.5, 1, 333, -1, 66.25]
>>> a.sort()
>>> a
[-1, 1, 66.25, 333, 333, 1234.5]

注意:類似 insert, remove 或 sort 等修改列表的方法沒有返回值。


將列表當(dāng)做堆棧使用

列表方法使得列表可以很方便的作為一個(gè)堆棧來使用,堆棧作為特定的數(shù)據(jù)結(jié)構(gòu),最先進(jìn)入的元素最后一個(gè)被釋放(后進(jìn)先出)。用 append() 方法可以把一個(gè)元素添加到堆棧頂。用不指定索引的 pop() 方法可以把一個(gè)元素從堆棧頂釋放出來。例如:

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]

將列表當(dāng)作隊(duì)列使用

也可以把列表當(dāng)做隊(duì)列用,只是在隊(duì)列里第一加入的元素,第一個(gè)取出來;但是拿列表用作這樣的目的效率不高。在列表的最后添加或者彈出元素速度快,然而在列表里插入或者從頭部彈出速度卻不快(因?yàn)樗衅渌脑囟嫉靡粋€(gè)一個(gè)地移動(dòng))。

>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry")           # Terry arrives
>>> queue.append("Graham")          # Graham arrives
>>> queue.popleft()                 # The first to arrive now leaves
'Eric'
>>> queue.popleft()                 # The second to arrive now leaves
'John'
>>> queue                           # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])

列表推導(dǎo)式

列表推導(dǎo)式提供了從序列創(chuàng)建列表的簡(jiǎn)單途徑。通常應(yīng)用程序?qū)⒁恍┎僮鲬?yīng)用于某個(gè)序列的每個(gè)元素,用其獲得的結(jié)果作為生成新列表的元素,或者根據(jù)確定的判定條件創(chuàng)建子序列。

每個(gè)列表推導(dǎo)式都在 for 之后跟一個(gè)表達(dá)式,然后有零到多個(gè) for 或 if 子句。返回結(jié)果是一個(gè)根據(jù)表達(dá)從其后的 for 和 if 上下文環(huán)境中生成出來的列表。如果希望表達(dá)式推導(dǎo)出一個(gè)元組,就必須使用括號(hào)。

這里我們將列表中每個(gè)數(shù)值乘三,獲得一個(gè)新的列表:

>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]

現(xiàn)在我們玩一點(diǎn)小花樣:

>>> [[x, x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]

這里我們對(duì)序列里每一個(gè)元素逐個(gè)調(diào)用某方法:

>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']

我們可以用 if 子句作為過濾器:

>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]

以下是一些關(guān)于循環(huán)和其它技巧的演示:

>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]

列表推導(dǎo)式可以使用復(fù)雜表達(dá)式或嵌套函數(shù):

>>> [str(round(355/113, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

嵌套列表解析

Python的列表還可以嵌套。

以下實(shí)例展示了3X4的矩陣列表:

>>> matrix = [
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12],
... ]

以下實(shí)例將3X4的矩陣列表轉(zhuǎn)換為4X3列表:

>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

以下實(shí)例也可以使用以下方法來實(shí)現(xiàn):

>>> transposed = []
>>> for i in range(4):
...     transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

另外一種實(shí)現(xiàn)方法:

>>> transposed = []
>>> for i in range(4):
...     # the following 3 lines implement the nested listcomp
...     transposed_row = []
...     for row in matrix:
...         transposed_row.append(row[i])
...     transposed.append(transposed_row)
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

del 語(yǔ)句

使用 del 語(yǔ)句可以從一個(gè)列表中依索引而不是值來刪除一個(gè)元素。這與使用 pop() 返回一個(gè)值不同。可以用 del 語(yǔ)句從列表中刪除一個(gè)切割,或清空整個(gè)列表(我們以前介紹的方法是給該切割賦一個(gè)空列表)。例如:

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

也可以用 del 刪除實(shí)體變量:

>>> del a

元組和序列

元組由若干逗號(hào)分隔的值組成,例如:

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))

如你所見,元組在輸出時(shí)總是有括號(hào)的,以便于正確表達(dá)嵌套結(jié)構(gòu)。在輸入時(shí)可能有或沒有括號(hào), 不過括號(hào)通常是必須的(如果元組是更大的表達(dá)式的一部分)。


集合

集合是一個(gè)無序不重復(fù)元素的集?;竟δ馨P(guān)系測(cè)試和消除重復(fù)元素。

可以用大括號(hào)({})創(chuàng)建集合。注意:如果要?jiǎng)?chuàng)建一個(gè)空集合,你必須用 set() 而不是 {} ;后者創(chuàng)建一個(gè)空的字典,下一節(jié)我們會(huì)介紹這個(gè)數(shù)據(jù)結(jié)構(gòu)。

以下是一個(gè)簡(jiǎn)單的演示:

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # fast membership testing
True
>>> 'crabgrass' in basket
False

>>> # Demonstrate set operations on unique letters from two words
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  # unique letters in a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # letters in a but not in b
{'r', 'd', 'b'}
>>> a | b                              # letters in either a or b
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # letters in both a and b
{'a', 'c'}
>>> a ^ b                              # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'}>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # fast membership testing
True
>>> 'crabgrass' in basket
False

>>> # Demonstrate set operations on unique letters from two words
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  # unique letters in a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # letters in a but not in b
{'r', 'd', 'b'}
>>> a | b                              # letters in either a or b
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # letters in both a and b
{'a', 'c'}
>>> a ^ b                              # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'}

集合也支持推導(dǎo)式:

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

字典

另一個(gè)非常有用的 Python 內(nèi)建數(shù)據(jù)類型是字典。

序列是以連續(xù)的整數(shù)為索引,與此不同的是,字典以關(guān)鍵字為索引,關(guān)鍵字可以是任意不可變類型,通常用字符串或數(shù)值。

理解字典的最佳方式是把它看做無序的鍵=>值對(duì)集合。在同一個(gè)字典之內(nèi),關(guān)鍵字必須是互不相同。

一對(duì)大括號(hào)創(chuàng)建一個(gè)空的字典:{}。

這是一個(gè)字典運(yùn)用的簡(jiǎn)單例子:

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}
>>> list(tel.keys())
['irv', 'guido', 'jack']
>>> sorted(tel.keys())
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False

構(gòu)造函數(shù) dict() 直接從鍵值對(duì)元組列表中構(gòu)建字典。如果有固定的模式,列表推導(dǎo)式指定特定的鍵值對(duì):

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'jack': 4098, 'guido': 4127}

此外,字典推導(dǎo)可以用來創(chuàng)建任意鍵和值的表達(dá)式詞典:

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

如果關(guān)鍵字只是簡(jiǎn)單的字符串,使用關(guān)鍵字參數(shù)指定鍵值對(duì)有時(shí)候更方便:

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'jack': 4098, 'guido': 4127}

遍歷技巧

在字典中遍歷時(shí),關(guān)鍵字和對(duì)應(yīng)的值可以使用 items() 方法同時(shí)解讀出來:

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

在序列中遍歷時(shí),索引位置和對(duì)應(yīng)值可以使用 enumerate() 函數(shù)同時(shí)得到:

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

同時(shí)遍歷兩個(gè)或更多的序列,可以使用 zip() 組合:

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

要反向遍歷一個(gè)序列,首先指定這個(gè)序列,然后調(diào)用 reversesd() 函數(shù):

>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

要按順序遍歷一個(gè)序列,使用 sorted() 函數(shù)返回一個(gè)已排序的序列,并不修改原值:

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

其他參閱文檔(Python2.x)

  • Python 列表
  • Python 元組
  • Python 字典
?? ??: ?? ??: