iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

用python學習資料結構與演算法 學習筆記系列 第 3

Dictionaries and tuples 字典與元組

  • 分享至 

  • xImage
  •  

Dictionary (字典)
Dictionary像是一個儲存的容器,沒有順序性,每個元素由一個key和value組成,value可以是另一個dictionary、list、字串、數字等等。字典在python裡記憶體的使用被設計成像hash table那樣 (hash table、hash function 之後的章節會更詳細介紹,這裡先帶大家使用dictionary,先記得key-value pair的特性就好)。

創建dictionary,時間複雜度: O(N), 空間複雜度: O(N)

dic1=dict(house1='Mary',house2='Jack',house3='Harry')
dic1
>> {'house1': 'Mary', 'house2': 'Jack', 'house3': 'Harry'}
dic2={'house1':'Mary','house2':'Jack','house3':'Harry'}
dic2
>> {'house1': 'Mary', 'house2': 'Jack', 'house3': 'Harry'}

更新(update)/增加(add)元素進dictionary,時間複雜度: O(1), 空間複雜度: O(1)

myDict={'name':'Edy','age':26}
myDict['age']=27
myDict
>> {'name':'Edy','age':27}

#add data
myDict['sex']='male'
myDict
>> {'name':'Edy','age':27,'sex':'male'}

# add dictionary to dictionary
myDict.update({'school':'Charite'})
myDict
>> {'name':'Edy','age':27,'sex':'male','school':'Charite'}
# 再一個例子
mydict2={'hobby':'coding','job':'Student','major':'biochemistry'}
myDict.update(mydict2)
myDict
>> {'name': 'Edy','age': 27,'sex': 'male','school': 'Charite','hobby': 'coding',
 'job': 'Student','major': 'biochemistry'}

走訪dictionary,時間複雜度:O(N),空間複雜度:O(1)。

for key in myDict:
    print(f'{key} : {myDict[key]}')

或者也可寫成
for key in myDict.keys():
    print(f'{key} : {myDict[key]}')
    
或者也可寫成
for key,value in myDict.items():
    print(f'{key} : {value}')

取得key中的值,時間複雜度:O(1),空間複雜度:O(1)。如果想找的key不在dictionary裡,會有error,所以很多時候會選用下一個要介紹的get而不是它

myDict['name']
>>'Edy'

取得key中的值,否則return default=None,時間複雜度:O(1),空間複雜度:O(1)。

#這個蠻常用的
myDict.get('name')
>>'Edy'

在字典內搜尋元素(value),時間複雜度: O(N),空間複雜度: O(1)

def searchDict(myDict,value):
    for key in myDict:
        if myDict[key]==value:
            return key, value
    return 'The value does not exist'
searchDict(myDict,27)
>>('age', 27)

從Dictionary刪除元素: 時間複雜度: O(1),空間複雜度: O(1)

del myDict['age']
或者是
myDict.pop('age')

刪除整個dictionary: 時間複雜度: O(N),空間複雜度: O(1)

myDict.clear()

在字典內創多個keys有相同的值

myDict={}.fromkeys(['A','B','C'],None)
myDict
>>{'A': None, 'B': None, 'C': None}

Tuple
Tuple一開始給人的感覺跟list很像,但它是immutable(不可變的),tuple內的值無法隨意更改,也不能隨意增加或刪除元素,也就是說list的方法像是:append()、insert()、remove()、pop()、clear()、sort()、reverse()皆不能在tuple上用;在tuple創建時,它在記憶體裡的位子就固定了(直接佔一個block),因此它比list有效率(快),以下直接來看程式碼比較容易理解。

創建一個tuple,時間複雜度: O(1),空間複雜度: O(N)

newTuple='a','b','c','d','e'
newTuple
>> ('a', 'b', 'c', 'd', 'e')

也可以寫作
newTuple1=tuple('abcde')
newTuple1
>> ('a', 'b', 'c', 'd', 'e')

從下面的例子可以看到,tuple沒辦法像list一樣隨意更改值

newTuple[0]='f'
>> TypeError: 'tuple' object does not support item assignment

根據idex取得tuple內的資料,時間複雜度:O(1),空間複雜度:O(1)

newTuple[0]
>>'a'

因為之後不管是linked list或是tree都需要使用class,下一篇我們會簡單介紹OOP(物件導向程式設計)。

參考資料:
The Complete Data Structures and Algorithms Course in Python (from Udemy)


上一篇
Array/ Python List 陣列與列表
下一篇
簡單介紹OOP (Object-Oriented Programming)
系列文
用python學習資料結構與演算法 學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言