python 資料結構

來源:互聯網
上載者:User

一. 深入鏈表

先來介紹一些鏈表具備的一些常用方法:

append(x) : 把一個元素添加到鏈表的結尾

extend(L) : 將另外一個鏈表合并到該鏈表中

insert(i,x) : 插入一個元素到指定位置的前面

remove(x) : 刪除鏈表中第一個值為x的元素 如果沒有這樣的元素 則返回錯誤

pop([i]) : 刪除鏈表中索引為i的元素,並將其返回,如果索引i大於鏈表的最大索引,則返回錯誤,如不提供索引,則刪除並返回最後一個元素

index(x) : 返回鏈表中第一個值為x的元素的索引

count(x) : 返回x在鏈表中出現的次數

sort() : 對鏈表中的元素就地排序    # 就地的意思就是ruby中以!結尾的函數

reverse() : 就地倒排

 

1. 如何把鏈表當作堆棧使用

堆棧的特點是先進後出,使用append()壓入,使用pop()彈出

 

2. 如何把鏈表當作隊列使用

隊列的特點是先進先出,使用append()將一個對象排到隊尾,使用pop(0)將第一個對象拉出

 

3. 函數化編程工具

對於鏈表來說,有三個函數作用很大:

(1) filter(function, list)

這個函數是過濾函數,返回list中所有經過function函數運算後傳回值為true的元素鏈表。

如:

1 ls = [1,2,3,4]
2 ls2 = filter(lambda x:x>1,ls)
3 print ls   #[1,2,3,4]
4 print ls2  #[2,3,4]

注意,filter函數不是一個就地處理函數,而是返回執行結果。

 

(2) map(function, list)

這個函數是依次處理函數,使用function函數依次對list中的元素進行計算,將計算結果們組成一個鏈表返回。

 

(3) reduce(function, list)

1 reduce( lambda x,y:x+y, range(1,5) )# 返回10  因為 [1,2,3,4]  1+2=3 3+3=6 6+4=10

該函數極少應用,可以忽略不看。

 

4. 鏈表推導式

就是在一個運算式或一個函數中尾碼if或for語句,然後推匯出一個鏈表,如:

1 [x*2 for x in range(10)] # [0,2,4,6,8,10,12,14,16,18]
2 ["lee:"+s for s in ['hi','hallo']] # ["lee:hi", "lee:hallo"]
3 [(lambda x:x*2)(x) for x in range(10)] # 結果同第一句 只不過第一句用了運算式 該句用函數

 

二. del語句

作用是刪掉指定列表元素,可以刪掉指定切片部分的元素。

1a = range(5)
2del a[0] # [1,2,3,4]
3del a[1,3] #[1,4]
4del a #刪除變數

 

 

三. 元組和序列

元組也是一個複合資料結構,可以將多個元素組織在一起,但不能改變其中某個元素的值。

元組是用()括起來的。

構建空元組的時候直接使用  x = () 即可

構建單元素的元組時要使用 x=1, 或者x=(1,)  只有一個括弧是不行的。

 

四. Sets集合

 sets集合的主要作用是:

可以對列表進行“與運算”,得到兩個列表中共有的元素。

可以對列表進行“或運算”,得到兩個列表擁有的所有元素。

可以對列表進行“異或運算”,得到兩個列表互相沒有的元素。

可以對列表進行“減運算”,可以從一個列表中排除另一個列表擁有的元素。

擷取一個set集合的方法是使用 set() 函數。如:

1 s1 = set(range(0,5)) # ([0,1,2,3,4])
2 s2 = set(range(3,8)) # ([3,4,5,6,7])
3 s1 - s2 #([0,1,2])
4 s1 | s2 #([0,1,2,3,4,5,6,7])
5 s1 & s2 #([3,4]) 
6 s1 ^ s2 #([0,1,2,5,6,7])

 

五. 字典

字典就是hash表,是以索引值來儲存的,鍵必須是不可變的,一般是字串或者數字,也可以是只包含字串或數位元組,假如元組中包含了可變對象,那該元組不能作為鍵。

1 a = (1,)
2 hash = {a:a}
3 hash[a] = 1 #ok
4 a = 1 #ok
5 print hash #{(1,):1}

可以用del來刪除一個  鍵/值   如果對已存在的鍵賦值,會覆蓋該鍵的值。

可使用keys()方法返回鍵的列表,

可使用has_key()方法來查詢是否含有一個鍵。

 

六. 迴圈技術

在字典迴圈時,關鍵字和對應的值可以用iteritems()方法同時讀出來。

1 h = {1:1, 2:2}
2 for k,v in h.iteritems():
3  print k,v

 

在序列中迴圈時,索引位置和對應值可以使用enumerate()函數同時讀出來。

1 for i,v in enumerate(['a','b','c'])
2  print i,v
3
4

 

同時迴圈多個序列,可以使用zip()整體解讀。

1 a = [1,2,3]
2 b = [2,4,6]
3 for v1,v2 in zip(a,b):
4  print v1,v2

 

需要逆向迴圈序列,需要先正向定位序列,再調用reversed()函數。

1 for i in reversed(range(1,100))
2  print i

 

要按排序後的序列迴圈,可以使用sorted()先排序

1 for i in sorted([1,3,2,5,9,7])
2  print i

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.