python資料結構 2017 7 26

2021-08-04 09:28:25 字數 4434 閱讀 7997

5.資料結構

5.1 深入列表

list物件的所有方法:

list.extend(l)  將指定列表中的所有元素新增到另乙個列表的末尾

list.insert(i,x)  在給定位置插入乙個元素

list.remove(x) 刪除列表中第乙個值為x的元素,如果沒有這樣的元素將會報錯。

list.pop(i)  刪除列表中指定位置的元素並返回它,如果是list.pop()將刪除並返回列表中的最後乙個元素

list.index(x)  返回列表中第乙個值為x的元素的索引。如果沒有這樣的元素將會報錯。

list.count(x)  返回列表中x出現的次數。

list.sort(cmp=none, key=none, reverse=false)   原地排序列表中的元素

list.reverse()   原地反轉列表中的元素。

測試**:

答案:

2 1 0

[66.25, 333, -1, 333, 1, 1234.5, 333]

1[66.25, -1, 333, 1, 1234.5, 333]

[333, 1234.5, 1, 333, -1, 66.25]

[-1, 1, 66.25, 333, 333, 1234.5]

1234.5

[-1, 1, 66.25, 333, 333]

5.1.1 用list(列表)作為stack(棧)

答案:

[3, 4, 5, 6, 7]76

5[3, 4]

5.1.2 用list(列表)作為queue(佇列)

也可以將列表當做佇列使用,此時最先進入的元素第乙個取出(先進先出),但這種方法效率很低。

可以使用collections.deque, 它設計的目的就是在兩端都能夠快速新增和彈出元素。

答案:

eric

john

deque(['michael', 'terry', 'graham'])

5.1.3 函式式程式設計工具

使用列表時三個函式非常有用:

filter(),map(),reduce()。

1.filter()

filter(function,

sequence)

返回的序列由function(item)

結果為真的元素組成。

def f(x):return x % 2 != 0 and x % 3 != 0

print filter(f, range(2,25))   

print range(2,25)#2--24

答案:

[5, 7, 11, 13, 17, 19, 23]

[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

2.map()

map(function,

sequence)

為序列中的每乙個元素呼叫 function(item)

函式並返回結果的列表。

def cube(x):return x*x*x

print map(cube,range(1,11))

答案:

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

3.reduce()

reduce(function,

sequence)

只返回乙個值,它首先以序列的前兩個元素呼叫函式 function,然後再以返回的結果和下乙個元素繼續呼叫,依此執行下去。

def add(x,y):return x+y

print reduce(add, range(1,11))

答案:

555.1.4 列表推導式

5.2 del語句

有個方法可以從列表中根據索引而不是值來刪除乙個元素:del

語句。這不同於有返回值的pop()

方法。del

語句還可以用於從列表中刪除切片或清除整個列表(之前我們是將空列表賦值給切片)。

a=[-1,1,66.25,333,333,1234.5]

del a[0]

print a

del a[2:4]  #2,3---第3個和第四個

print a

del a[:]

print a

答案:

[1, 66.25, 333, 333, 1234.5]

[1, 66.25, 1234.5]

5.3 tuples(元祖)和sequence(序列)

我們已經看到列表和字串具有很多共同的屬性,如索引和切片操作。

它們是序列資料型別的兩個例子(參見序列型別 — str, unicode, list, tuple, bytearray, buffer, xrange

)。因為 python 是乙個正在不斷進化的語言,其他的序列型別也可能被新增進來。

還有另一種標準序列資料型別:元組。

5.4 set(集合)

python還包含乙個資料型別用於集合。

集合中的元素沒有順序且不會重複。

集合的基本用途有成員測試和消除重複的條目。

集合物件還支援並集、交集、差和對稱差等數**算。

花括號或set()

函式可以用於建立集合。

注意:若要建立乙個空的集合你必須使用set()

,不能用{}

;後者將建立乙個空的字典,乙個我們在下一節中要討論的資料結構。

這裡是乙個簡短的演示

5.5 字典

)。在其它語言中字典有時被稱為「聯合儲存」 或者 「聯合佇列」。

與序列不同,序列由數字做索引,字典由 key 做索引,key可以是任意不可變型別;

字串和數字常用來做key。

tel =

tel['guido'] = 4127

print tel

print tel['jack']

del tel['sape']

tel['irv'] = 4127

print tel

print tel.keys()

print 'guido' in tel

答案

4098

['jack', 'irv', 'guido']

true

dict()

建構函式直接從鍵-值對序列建立字典:

>>>

>>> 

dict

([('sape'

,4139),(

'guido'

,4127),(

'jack'

,4098

)])

5.6 遍歷的技巧

5.7 深入條件控制

while

和 if

語句中使用的條件可以包含任意的操作,而不僅僅是比較。

比較操作符 in

和 not

in 檢查乙個值是否在乙個序列中出現(不出現)。

is 和 is

not 運算子比較兩個物件是否為相同的物件;

這只和列表這樣的可變物件有關。

所有比較運算子都具有相同的優先順序,低於所有數值運算子。

比較可以級聯。

例如,a

<

b ==

c測試a

是否小於b

並且b是否等於c。

可以使用布林運算子and

和 or

組合,比較的結果(或任何其他的布林表示式)可以用 not

取反。這些操作符的優先順序又低於比較操作符;

它們之間,not

優先順序最高,or

優先順序最低,所以 a

and

notb

or c

等效於 (a

and

(not

b))or c。

與往常一樣,可以使用括號來表示所需的組合。

布林運算子and

和 or

是所謂的 短路 運算子:依引數從左向右求值,結果一旦確定就停止。

例如,如果a

和 c都為真,但b

是假, a

and

band

c 將不計算表示式 c

。用作乙個普通值而非邏輯值時,短路操作符的返回值通常是最後乙個計算的。

可以把比較或其它邏輯表示式的返回值賦給乙個變數。

例如,

python資料結構

資料結構是一種結構,它們用以把一些資料儲存在一起。在python中有三種內建的資料結構 列表 list 元組 tuple 字典 dictionary 列表由一對方括號括起來,其中的專案之間以逗號分隔。你可以在列表中增加 刪除 查尋專案。示例如下 python using list.py 這兒有 4 ...

python 資料結構

刪除元素 remove,pop,del set是乙個無序的,不重複的元素集合 set中每個元素都是可雜湊的,但是set不是可雜湊的。相對應的frozenset,可hash,可以作為keys存在於dict中 支援 x in set,len set for x in set,不支援slice等序列操作 ...

python 資料結構

變數是只不過保留的記憶體位置用來儲存值。這意味著,當建立乙個變數,那麼它在記憶體中保留一些空間a abc 1.在記憶體中建立了乙個 abc 的字串 2.在記憶體中建立了乙個名為a的變數,並把它指向 abc a abc b a a xyz a abc 直譯器建立了字串 abc 和變數a,並把a指向 a...