1. 程式人生 > >Python中列表,元組,字典,集合的區別

Python中列表,元組,字典,集合的區別

參考文件
https://blog.csdn.net/Yeoman92/article/details/56289287

理解Python中列表,元組,字典,集合的區別

列表,元組,字典,集合的區別是python面試中最常見的一個問題。這個問題雖然很基礎,但確實能反映出面試者的基礎水平。

1.列表(List)

  什麼是列表呢?我覺得列表就是我們日常生活中經常見到的清單。比如,統計過去一週我們買過的東西,把這些東西列出來,就是清單。
由於我們買一種東西可能不止一次,所以清單中是允許有重複項的。如果我們擴大清單的範圍,統計我們過去一週所有的花費情況,
那麼這也是一個清單,但這個清單裡會有類別不同的項,比如我們買東西是一種花費,交水電費也是一種花費,這些項的型別是可以使不同的。
python的列表個跟清單的道理是一樣的,特點就是:可重複,型別可不同。型別不同也是跟陣列最本質的區別了。python裡的列表用“[]”表示。


#定義一個列表
listA = ['a', 'b', 'c', 1, 2]

listA[1] # 'b'

# 向 list 中增加元素

# 1.使用append 向list 的末尾追加單個元素。(把列表當做堆疊使用——後進(後出))
#listA = ['a', 'b', 'c', 1, 2, 3]
listA.append(3)

# 2.使用 insert 將單個元素插入到list 中。數值引數是插入點的索引
# 在下標為3處插入一個元素,listA = ['a', 'b', 'c', 'd', 1, 2, 3]
listA.insert(3, 'd')

# 3.使用 extend 用來連線 list
# listA = ['a', 'b', 'c', 'd', 1, 2, 3, 7, 8]
listA.extend([7, 8])

# 獲取列表的長度
print len(listA) # 9

# 在 list 中搜索
listA.index(3) # index 在 list 中查詢一個值的首次出現並返回索引值。
listA.index('100') # 如果在 list 中沒有找到值,Python 會引發一個異常。

print 5 in listA # 要測試一個值是否在 list 內,使用 in。如果值存在,它返回 True,否則返為 False 。

# 從 list 中刪除元素
listA.remove(3) # remove 從 list 中 僅僅 刪除一個值的首次出現。如果在 list 中沒有找到值,Python 會引發一個異常

print listA.pop() # pop 它會做兩件事:刪除 list 的最後一個元素,然後返回刪除元素的值。(把列表當做堆疊使用——(後進)後出)

# 還有一種把列表當做佇列使用,最先進入的元素最先釋放(先進先出)
# 不過,列表這樣用效率不高。相對來說從列表末尾新增和彈出很快;
# 在頭部插入和彈出很慢(因為,為了一個元素,要移動整個列表中的所有元素)。

# 遍歷list
for item in listA:
print item


extend (擴充套件) 與 append (追加) 的看起來類似,但實際上完全不同。

extend 接受一個引數,這個引數總是一個 list,並且把這個 list 中的每個元素新增到原 list 中。
append 接受一個引數,這個引數可以是任何資料型別,並且簡單地追加到 list 的尾部。

 


2.元組(Tuple)

  元組和列表在結構上沒有什麼區別,唯一的差異在於元組是隻讀的,不能修改。元組用“()”表示


#定義一個元組
tuple1 = (1,2,'a',4,'5',6)

# 定義了一個元組之後就無法再新增或修改元組中的元素

print tuple1[2] # 'a' 元組的元素都有確定的順序。元組的索引也是以0為基點的
print tuple1[-1] # '5' 負的索引從元組的尾部開始計數
print tuple1[1:3] # (2, 'a') 元組也可以進行切片操作。對元組切片可以得到(返回)新的元組,原元組不變

# 可以使用 in 運算子檢查某元素是否存在於元組中。
print 1 in tuple1 # True

#使用for in 進行遍歷元組
for item in tuple1:
print item

# 如果需要獲取item的序號 可以使用下面的遍歷方法:
for index in range(len(tuple1)): #range(len(tuple1))就是生成一個自然排序列表
print tuple1[index]

# 還可以使用內建的enumerate函式
for index, item in enumerate(tuple1):
print '%i, %s' % (index, item)

 

 

3.字典(Dictionary)

  字典定義了鍵和值之間一對一的關係,但它們是以無序的方式儲存的。 Python 中的 dictionary 像 Java 中的 Hashtable 類的例項。定義 Dictionary 使用一對大(花)括號” { } “

Dictionary 不只是用於儲存字串。Dictionary 的值可以是任意資料型別,包括字串、整數、物件,甚至其它的 dictionary。
在單個 dictionary 裡,dictionary 的值並不需要全都是同一資料型別,可以根據需要混用和匹配。

 

# 定義一個字典
dict1 = {'name' : 'yeoman', 'age' : 24, 'sex' : 'Male'}

dict1['name'] = 'yuanm' # 為一個已經存在的 dictionary key 賦值,將簡單覆蓋原有的值。
dict1['Age'] = 25 # 在 Python 中是區分大小寫的 age和Age是完全不同的兩個key

# 從字典中刪除元素
del dict1['sex'] # del 允許您使用 key 從一個 dictionary 中刪除獨立的元素

dict1.clear() # clear 從一個 dictionary 中清除所有元素

 

 

4.集合(Set)

  Python的集合(set)和其他語言類似, 是一個無序不重複元素集, 基本功能包括關係測試和消除重複元素.
集合物件還支援union(聯合), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數學運算.由於集合是無序的,所以,sets 不支援 索引, 分片, 或其它類序列(sequence-like)的操作。

集合也存在不可變形式,frozenset為固定集合.
set和dict類似,也是一組key的集合,但不儲存value。由於key不能重複,所以,在set中,沒有重複的key。
注意:想要建立空集合,你必須使用 set() 而不是 {} ,後者用於建立空字典
可以通過一個set函式轉換成集合,如:

 

lst = [ 1, 1, 0]

lst_set = set( lst ) #lst_set 為1 , 0

tup = (2, 2, 1)

tup_set = set( tup) # tup_set為2 , 1

for item in lst_set:
print item

 

# 使用 set 函式建立集合
list1 = [6, 7, 7, 8, 8, 9]
set2 = set(list1)

set2.add(10) # 新增新元素
print set2 # set([8, 9, 10, 6, 7]) 去掉重複內容,而且是無序的

set3 = frozenset(list1)
#set3.add(10) # 固定集合不能新增元素,會報錯AttributeError: 'frozenset' object has no attribute 'add'

### 集合有並集,交集,求差操作
### a & b 並集:intersection() 方法返回一個新集合,包含在兩個集合中同時出現的所有元素。
### a | b 交集:union() 方法返回一個新集合,包含在兩個 集合中出現的元素。
### a - b 差集:difference() 方法返回的新集合中,包含所有在 集合A出現但未在集合B中的元素。
### a ^ b 對稱差集:symmetric_difference() 方法返回一個新集合,包含所有隻在其中一個集合中出現的元素。

# 刪除元素
set2.discard(6) # 當元素不存在時,不會引發異常
set2.remove(6) # 與discard的區別在於,如果沒有要刪除的元素,remove會引發一個異常
set2.pop() # 因為set是無序的,所以pop會隨機的從set中刪除一個元素