Python演算法題常用函式記憶清單

yhzyl發表於2024-10-19
系統設計題&模擬題連結:https://leetcode.cn/problem-list/design/

字串操作

splite 按指定分隔符轉成 list

str_list= text.split() # 預設按空格分割 (函式寫在後面,用 . 來呼叫

str_list= text.split(",") # 按逗號分割

strip()去除兩邊的空格

trimmed_text = text.strip() # 去除兩端的空格 (函式寫在後面,用 . 來呼叫

join把list轉成字串輸出,是把分割符寫在變數前面

# 假設我們有一個包含整數的列表
my_list = [1, 2, 3, 4, 5]

# 以空格分割,將整數轉換為字串,輸出: '1 2 3 4 5'
my_string = ' '.join([str(i) for i in my_list])



list 列表

a = list() 或者 a = [] --初始化
list.append(x) --尾部新增元素x
x = list.pop(-1) --尾部移除元素並賦值給x,預設引數-1,索引值,0的話則pop首元素
list降序排序:
my_list.sort(reverse=True) 或者 sorted_list = sorted(my_list, reverse=True)

字典 Dictionary,也稱雜湊表,hashmap

以leetcode 1396為例

重點記憶:初始化,dic[key] 索引訪問value,value = dic.get(key,None)

class UndergroundSystem:

    def __init__(self):
        self.stationinfo=dict() #初始化方式1
        self.timerecord={}      #初始化方式2

    def checkIn(self, id: int, stationName: str, t: int) -> None:
        self.stationinfo[id] =  (stationName,t)  # id為key,(stationName,t)這個元組tuple為value,不允許用list為key

    def checkOut(self, id: int, stationName: str, t: int) -> None:
        # self.stationinfo[id] = [stationName,t]
       
        starttime = self.stationinfo[id][1] #查表找入站時間,第二維度01用來表示元組索引
        startstation = self.stationinfo[id][0] # 查表找入站名稱
             
        # if self.timerecord[[startstation,stationName]] == None: #不能用不可hash的list做key,下面換成tuple正解
        #     self.timerecord[[startstation,stationName]] = {0,0}

        tmp = self.timerecord.get((startstation,stationName),(0,0)) #字典get的寫法,第一個參為key,第二個參為訪存沒中的返回值,預設為None
        self.timerecord[(startstation,stationName)] = (tmp[0]+t-starttime,tmp[1]+1) #{‘起點站’,‘終點站’} = {原來總時間+新乘客時間,乘客數量+1}


    def getAverageTime(self, startStation: str, endStation: str) -> float:
        timeAmount,touristNum = self.timerecord[(startStation,endStation)]
        return timeAmount/touristNum if touristNum>0 else 0

上面變數裡的值長下面這樣:

字典的補充

自定義的排序鍵(key)來對字典進行排序。字典值是包含三個元素的陣列,按照先第二個數,再第一個數,最後第三個數的順序對字典進行排序。

# 示例字典  
data = {  
    'a': [1, 2, 3],  
    'b': [4, 1, 6],  
    'c': [7, 5, 8],  
    'd': [1, 3, 2]  
}  
  
# 自定義排序鍵對字典進行排序,說白就是給list排序,根據裡面tuple的value這個list的元素索引排序
sorted_data = dict(sorted(data.items(), key=lambda item: (item[1][1], item[1][0], item[1][2])))  
  
# 輸出排序後的字典  
print(sorted_data)

上面例子中:

1. data.items() 以列表返回可遍歷的(鍵, 值) 元組陣列,每個項是一個 (k, v) 對。

2. sorted() 函式用於對這些項進行排序。

3. key=lambda item: (item[1][1], item[1][0], item[1][2]) 定義了一個排序鍵,其中 item[1] 是字典的值(即包含三個元素的列表),item[1][1] 是列表中的第二個元素,item[1][0] 是列表中的第一個元素,item[1][2] 是列表中的第三個元素。

set 集合(元素唯一但無序)

初始化:parame = {value01,value02,...} 或者 set(value),注意與字典區分

增:set.add(x) 新增元素,重複則略過

刪:

s.remove(x) --元素不存在,則會發生錯誤

s.discard(x) --不會報錯,強烈建議用這個!!

改:刪了再增?

查: if a in set: True則表示a在set裡

set轉list直接:list(set)即可;

set轉list並排序的話:sorted_list = sorted(set)

相關文章