Python中的list(列表)、tuple(元組)、dict(字典)和set(集合)

1. List

列表,即list是Python中內置的一種結構化數據類型。它是一種有序的集合(注意其中元素的類型不要求相同),可以隨時添加和刪除其中的元素。

1 ) 初始化

list1 = []            #一個空列表
list2 = [1, 2, 3, 5]  #一個非空列表

 

2 ) 基本操作

  • 追加元素到末尾:
list1.append(6)
  • 把元素插入到指定的位置,其中第一個參數是指示具體位置的索引:
list2.insert(3, 4)
  • 用一個列表來擴展另外一個列表,即把一個列表中的所有元素追加到另外一個列表的末尾:
list2.extend(list1)

 

3 ) 列表解析(list comprehension)

從一個列表中篩選出符合條件的元素,例如:

list3 = [x for x in list2 if x%2==0]

 


2. Tuple

元組也是一種有序列表,它與列表很相似,但是元組中的內容是不能修改的

tuple1 = (1, 2)
tuple1 = (1, )   #注意只有一個元素的tuple不能寫成 tuple1 = (1)

或者有時你需要把把一個list轉換成tuple,例如:

tuple2 = tuple(list2)

 


3. Dict

Python中內置了字典類型dict,即dictionary,在其他語言中也稱爲map,使用鍵-值(key-value)對存儲,具有極快的查找速度。

 

1 ) 初始化與訪問

dict1 = {}                                    #一個空字典
dict2 = {'Tom': 95, 'Jack': 75, 'Mary': 85}   #一個非空字典

通過鍵-值對的賦值,可以向字典中添加新元素(如果原鍵不存在的化),如果原鍵本就存在於字典中,那麼賦值就相當於將原有值設置成新值(因爲一個key只能對應一個value,所以,多次對一個key放入value,後面的值會把前面的值沖掉),例如:

dict1['color'] = 'red'
dict2['Tom'] = 100

另外,如果要取某個key對應的value時,若key不存在,那麼該訪問將報KeyError錯誤。要避免這種錯誤,有兩種方法:

i)訪問前,先通過in判斷key是否存在:

if 'Tom' in dict2:
    print('Yes')

ii)通過dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

dict2.get('James')
dict2.get('James', -1)

 

2 ) 刪除

刪除字典中的某一項:

del dict2['Mary']

 

3 ) 遍歷

兩個重要的方法:keys() 返回字典的所有的key,values() 返回字典所有的值,例如

for k in dict2.keys():
    print(k)

 


4. Set

Set就是集合,它具有無序不重複的特點。

 

1 ) 初始化

可以用一個列表來初始化一個集合,但是集合會對原列表做去重操作:

s1 = set([1, 1, 2, 2, 3, 3])   # {1, 2, 3}
s2 = set()                       # 初始化一個空集

 

2 ) 基本操作

通過add(key)方法可以添加元素到set中,若添加了重複的元素,則不會產生效果;通過remove(key)方法可以刪除元素:

s1.add(4)
s1.remove(1)

對於set來說,數學上的定義的集合操作(包括求交、並等),Python中也是支持的:

s1 = set([1, 2, 3])
s2 = set([2, 3, 4])

s1 & s2    #{2, 3}
s1 | s2    #{1, 2, 3, 4}

 

3 ) hashable 與 unhashable

爲了追求高的搜索效率,Set中的元素必須是可哈希的(hashable)。基本數據類型都屬於此類,Tuple也是如此。但列表是unhashable的。因此,“列表的列表”是可行的,但“列表的集合”則是不可行的。通常,如果集合中的元素是一個有序表,那麼需要使用tuple類型。

listoflists = [[0, 1, 2], [2, 3, 5, 6], [0, 1, 2], [1, 2, 3, 4, 5]]
setoftuples = {tuple(l) for l in listoflists} #{(0, 1, 2), (1, 2, 3, 4, 5), (2, 3, 5, 6)}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章