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