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中刪除一個元素

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM