天天看點

python學習筆記--字典,清單,元組,集合

字典

字典是另一種可變容器模型,且可存儲任意類型對象。

鍵一般是唯一的,如果重複最後的一個鍵值對會替換前面的,值不需要唯一。

>>> dict = {'a': 1, 'b': 2, 'b': '3'}
>>> dict['b']
'3'
>>> dict
{'a': 1, 'b': '3'}
#值可以取任何資料類型,但鍵必須是不可變的,如字元串,數字或元組。
           

一個簡單的字典執行個體:

dict2 = { ‘abc’: 123, 98.6: 37 }

通路字典裡的值

把相應的鍵放入熟悉的方括弧,如下執行個體:

修改字典

向字典添加新内容的方法是增加新的鍵/值對,修改或删除已有鍵/值對如下執行個體:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
 
dict['Age'] = 8 # 更新
dict['School'] = "RUNOOB" # 添加
 
 print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']
           

以上執行個體輸出結果:

dict['Age']:  8
dict['School']:  RUNOOB
           

删除字典元素

能删單一的元素也能清空字典,清空隻需一項操作。

顯示删除一個字典用del指令,如下執行個體:

執行個體

dict = {‘Name’: ‘Zara’, ‘Age’: 7, ‘Class’: ‘First’}

del dict[‘Name’] # 删除鍵是’Name’的條目

dict.clear() # 清空字典所有條目

del dict # 删除字典

字典鍵的特性

字典值可以沒有限制地取任何python對象,既可以是标準的對象,也可以是使用者定義的,但鍵不行。

兩個重要的點需要記住:

1)不允許同一個鍵出現兩次。建立時如果同一個鍵被指派兩次,後一個值會被記住

2)鍵必須不可變,是以可以用數字,字元串或元組充當,是以用清單就不行

字典内置函數&方法

Python字典包含了以下内置函數:

序号 函數及描述

1 cmp(dict1, dict2)

比較兩個字典元素。

2 len(dict)

計算字典元素個數,即鍵的總數。

3 str(dict)

輸出字典可列印的字元串表示。

4 type(variable)

傳回輸入的變量類型,如果變量是字典就傳回字典類型。

Python字典包含了以下内置方法:

1 dict.clear()

删除字典内所有元素

2 dict.copy()

傳回一個字典的淺複制

3 dict.fromkeys(seq[, val])

建立一個新字典,以序列 seq 中元素做字典的鍵,val 為字典所有鍵對應的初始值

4 dict.get(key, default=None)

傳回指定鍵的值,如果值不在字典中傳回default值

5 dict.has_key(key)

如果鍵在字典dict裡傳回true,否則傳回false

6 dict.items()

以清單傳回可周遊的(鍵, 值) 元組數組

7 dict.keys()

以清單傳回一個字典所有的鍵

8 dict.setdefault(key, default=None)

和get()類似, 但如果鍵不存在于字典中,将會添加鍵并将值設為default

9 dict.update(dict2)

把字典dict2的鍵/值對更新到dict裡

10 dict.values()

以清單傳回字典中的所有值

11 pop(key[,default])

删除字典給定鍵 key 所對應的值,傳回值為被删除的值。key值必須給出。 否則,傳回default值。

12 popitem()

傳回并删除字典中的最後一對鍵和值。

清單

清單是最常用的Python資料類型,它可以作為一個方括号内的逗号分隔值出現。

Python有6個序列的内置類型,但最常見的是清單和元組。

序列都可以進行的操作包括索引,切片,加,乘,檢查成員。

清單的資料項不需要具有相同的類型

建立一個清單,隻要把逗号分隔的不同的資料項使用方括号括起來即可。如下所示:

與字元串的索引一樣,清單索引從0開始。清單可以進行截取、組合等。

通路清單中的值

使用下标索引來通路清單中的值,同樣也可以使用方括号的形式截取字元

更新清單

你可以對清單的資料項進行修改或更新,你也可以使用append()方法來添加清單項

删除清單元素

可以使用 del 語句來删除清單的元素

Python清單腳本操作符

清單對 + 和 * 的操作符與字元串相似。+ 号用于組合清單,* 号用于重複清單。

如下所示:

len([1, 2, 3]) 3 長度

[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 組合

[‘Hi!’] * 4 [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] 重複

3 in [1, 2, 3] True 元素是否存在于清單中

for x in [1, 2, 3]: print x, 1 2 3 疊代

Python清單截取

Python 的清單截取執行個體如下:

>>>L = ['Google', 'Runoob', 'Taobao']
>>> L[2]
'Taobao'
>>> L[-2]
'Runoob'
>>> L[1:]
['Runoob', 'Taobao']
           

描述:

Python 表達式 結果 描述

L[2] ‘Taobao’ 讀取清單中第三個元素

L[-2] ‘Runoob’ 讀取清單中倒數第二個元素

L[1:] [‘Runoob’, ‘Taobao’] 從第二個元素開始截取清單

Python包含以下函數:

1 cmp(list1, list2)

比較兩個清單的元素

2 len(list)

清單元素個數

3 max(list)

傳回清單元素最大值

4 min(list)

傳回清單元素最小值

5 list(seq)

将元組轉換為清單

Python包含以下方法:

1 list.append(obj)

在清單末尾添加新的對象

2 list.count(obj)

統計某個元素在清單中出現的次數

3 list.extend(seq)

在清單末尾一次性追加另一個序列中的多個值(用新清單擴充原來的清單)

4 list.index(obj)

從清單中找出某個值第一個比對項的索引位置

5 list.insert(index, obj)

将對象插入清單

6 list.pop([index=-1])

移除清單中的一個元素(預設最後一個元素),并且傳回該元素的值

7 list.remove(obj)

移除清單中某個值的第一個比對項

8 list.reverse()

反向清單中元素

9 list.sort(cmp=None, key=None, reverse=False)

對原清單進行排序

元組

元組與清單類似,不同之處在于元組的元素不能修改。

元組使用小括号,清單使用方括号。

元組建立很簡單,隻需要在括号中添加元素,并使用逗号隔開即可。

如下執行個體:

tup1 = (‘physics’, ‘chemistry’, 1997, 2000)

tup2 = (1, 2, 3, 4, 5 )

tup3 = “a”, “b”, “c”, “d”

建立空元組

tup1 = ()

元組中隻包含一個元素時,需要在元素後面添加逗号

tup1 = (50,)

元組與字元串類似,下标索引從0開始,可以進行截取,組合等。

通路元組

元組可以使用下标索引來通路元組中的值,如下執行個體:

tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
 
print "tup1[0]: ", tup1[0]
print "tup2[1:5]: ", tup2[1:5]
           

以上執行個體輸出結果:

tup1[0]:  physics
tup2[1:5]:  (2, 3, 4, 5)
           

修改元組

元組中的元素值是不允許修改的,但我們可以對元組進行連接配接組合,如下執行個體:

tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
 
# 以下修改元組元素操作是非法的。
# tup1[0] = 100
 
# 建立一個新的元組

tup3 = tup1 + tup2
print tup3
           

以上執行個體輸出結果:

删除元組

元組中的元素值是不允許删除的,但我們可以使用del語句來删除整個元組

元組運算符

與字元串一樣,元組之間可以使用 + 号和 * 号進行運算。這就意味着他們可以組合和複制,運算後會生成一個新的元組。

len((1, 2, 3)) 3 計算元素個數

(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) 連接配接

(‘Hi!’,) * 4 (‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’) 複制

3 in (1, 2, 3) True 元素是否存在

for x in (1, 2, 3): print x, 1 2 3 疊代

元組索引,截取

因為元組也是一個序列,是以我們可以通路元組中的指定位置的元素,也可以截取索引中的一段元素,如下所示:

元組:

L = (‘spam’, ‘Spam’, ‘SPAM!’)

L[2] ‘SPAM!’ 讀取第三個元素

L[-2] ‘Spam’ 反向讀取,讀取倒數第二個元素

L[1:] (‘Spam’, ‘SPAM!’) 截取元素

無關閉分隔符

任意無符号的對象,以逗号隔開,預設為元組

元組内置函數

Python元組包含了以下内置函數

1 cmp(tuple1, tuple2)

比較兩個元組元素。

2 len(tuple)

計算元組元素個數。

3 max(tuple)

傳回元組中元素最大值。

4 min(tuple)

傳回元組中元素最小值。

5 tuple(seq)

将清單轉換為元組。

集合

集合(set)是一個無序的不重複元素序列。

可以使用大括号 { } 或者 set() 函數建立集合,注意:建立一個空集合必須用 set() 而不是 { },因為 { } 是用來建立一個空字典。

建立格式:

parame = {value01,value02,…}

或者

set(value)

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # 這裡示範的是去重功能
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 快速判斷元素是否在集合内
True
>>> 'crabgrass' in basket
False

>>> # 下面展示兩個集合間的運算.
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}
>>> a | b                              # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 集合a和b中都包含了的元素
{'a', 'c'}
>>> a ^ b                              # 不同時包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}
           

類似清單推導式,同樣集合支援集合推導式(Set comprehension):

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

集合的基本操作

1、添加元素

文法格式如下:

s.add( x )

将元素 x 添加到集合 s 中,如果元素已存在,則不進行任何操作。

還有一個方法,也可以添加元素,且參數可以是清單,元組,字典等,文法格式如下:

s.update( x )

x 可以有多個,用逗号分開。

2、移除元素

文法格式如下:

s.remove( x )

将元素 x 從集合 s 中移除,如果元素不存在,則會發生錯誤。

此外還有一個方法也是移除集合中的元素,且如果元素不存在,不會發生錯誤。格式如下所示:

s.discard( x )

我們也可以設定随機删除集合中的一個元素,文法格式如下:

s.pop()

set 集合的 pop 方法會對集合進行無序的排列,然後将這個無序排列集合的左面第一個元素進行删除。

3、計算集合元素個數

文法格式如下:

len(s)

計算集合 s 元素個數。

4、清空集合

文法格式如下:

s.clear()

清空集合 s。

5、判斷元素是否在集合中存在

文法格式如下:

x in s

判斷元素 x 是否在集合 s 中,存在傳回 True,不存在傳回 False。

集合内置方法完整清單

add() 為集合添加元素

clear() 移除集合中的所有元素

copy() 拷貝一個集合

difference() 傳回多個集合的差集

difference_update() 移除集合中的元素,該元素在指定的集合也存在。

discard() 删除集合中指定的元素

intersection() 傳回集合的交集

intersection_update() 傳回集合的交集。

isdisjoint() 判斷兩個集合是否包含相同的元素,如果沒有傳回 True,否則傳回 False。

issubset() 判斷指定集合是否為該方法參數集合的子集。

issuperset() 判斷該方法的參數集合是否為指定集合的子集

pop() 随機移除元素

remove() 移除指定元素

symmetric_difference() 傳回兩個集合中不重複的元素集合。

symmetric_difference_update() 移除目前集合中在另外一個指定集合相同的元素,并将另外一個指定集合中不同的元素插入到目前集合中。

union() 傳回兩個集合的并集

update() 給集合添加元素