返回文章列表

Python 資料結構 Tuples Sets Dictionaries 應用

本文探討 Python 中 Tuples、Sets 和 Dictionaries 三種重要資料結構的特性與應用。涵蓋字典基礎操作、最佳化字典輸出、計算字元頻率、數字平方計算、正負數計數、八進位轉二進位、多項式表示與評估、Orange Cap 計算器實作以及 Turtle

Python 資料結構

Python 的 Tuples、Sets 和 Dictionaries 提供了多元的資料儲存和操作方式。Tuples 的不可變特性適用於儲存固定資料,Sets 的無序性和唯一性則適合處理集合運算,Dictionaries 的鍵值對結構則能有效組織和存取資料。透過理解這些資料結構的特性,開發者能更有效率地處理各種資料操作任務。文章中除了基本操作外,更進一步探討瞭如何應用字典表示多項式、計算 Orange Cap 得主以及使用 Turtle 模組繪製圖形等進階應用,展現了這些資料結構在實際程式設計中的靈活性。

Python 中的 Tuples、Sets 和 Dictionaries 應使用案例項

在 Python 程式設計中,Tuples、Sets 和 Dictionaries 是三種非常重要的資料結構,它們各自具有獨特的特性與應用場景。本篇文章將探討 Dictionaries 的相關應用,並透過具體的程式範例來展示其強大的功能。

字典(Dictionaries)基礎操作

字典是一種無序的鍵值對集合,其中鍵(Key)是唯一的,而值(Value)則可以是任意型別的資料。字典在 Python 中使用大括號 {} 來定義。

範例 1:存取字典中的資料

Players = {
    "Virat Kohli": {"ODI": 7212, "Test": 3245},
    "Sachin Tendulkar": {"ODI": 18426, "Test": 15921}
}

# 方法 1:直接存取
for Player_Name, Player_Details in Players.items():
    print(" ", Player_Name)
    print(" ", Player_Details)

# 方法 2:存取特定資訊
for Player_Name, Player_Details in Players.items():
    print(" Player: ", Player_Name)
    print(" Run Scored in ODI:\t", Player_Details["ODI"])
    print(" Run Scored in Test:\t", Player_Details["Test"])

內容解密:

  1. 在第一種方法中,我們使用 Players.items() 來迭代字典中的鍵值對,其中 Player_Name 代表鍵(球員名稱),而 Player_Details 則代表對應的值(球員詳細資訊)。
  2. 在第二種方法中,我們進一步存取了 Player_Details 這個內嵌字典中的特定資訊,如 ODI 和 Test 的得分。

最佳化字典的輸出

為了使程式碼更具可維護性,我們可以透過巢狀迴圈來迭代字典中的所有資訊。

Players = {
    "Virat Kohli": {"ODI": 7212, "Test": 3245},
    "Sachin Tendulkar": {"ODI": 18426, "Test": 15921}
}

for Player_Name, Player_Details in Players.items():
    print(" ", Player_Name)
    for key in Player_Details:
        print(key, ':', str(Player_Details[key]))

內容解密:

  1. 外層迴圈迭代主字典中的球員名稱及其對應的詳細資訊。
  2. 內層迴圈則進一步迭代每個球員的詳細資訊字典,輸出各項統計資料的鍵值對。

簡易字典程式範例

範例 2:計算字串中字元的頻率

def Histogram(S):
    D = dict()  # 建立空字典
    for C in S:
        if C not in D:
            D[C] = 1
        else:
            D[C] = D[C] + 1
    return D

H = Histogram("AAPPLE")
print(H)

內容解密:

  1. 函式 Histogram(S) 將字串 S 作為輸入,並建立一個空字典 D
  2. 透過迭代字串中的每個字元 C,如果 C 不在字典中,則新增該字元並將其計數設為 1;若已存在,則增加其計數。

範例 3:使用 get() 方法計算字元頻率

def Histogram(S):
    D = dict()
    for C in S:
        D[C] = D.get(C, 0) + 1
    return D

H = Histogram("AAPPLE")
print(H)

內容解密:

  1. 使用 get() 方法簡化了字元頻率的計算:如果鍵不存在,則傳回預設值 0。

範例 4:將數字的平方存入字典

def Sq_of_numbers(n):
    d = dict()  
    for i in range(1, n+1):  
        d[i] = i * i  
    return d

Z = Sq_of_numbers(5)
print(Z)

內容解密:

  1. 此函式計算從 1 到 n 的數字的平方,並將結果存入字典中。

範例 5:計算列表中正負數的數量

def abc(L):
    D = {"Pos": 0, "Neg": 0}
    for x in L:
        if x > 0:
            D["Pos"] += 1
        else:
            D["Neg"] += 1
    print(D)

L = [1, -2, -3, 4]
abc(L)

內容解密:

  1. 此函式初始化一個字典 D 以計數正數和負數。
  2. 迭代輸入列表 L,根據數值的正負更新字典中的計數。

這些範例展示了 Python 中字典的靈活性和強大功能。無論是處理複雜的資料結構還是進行簡單的資料統計,字典都是不可或缺的工具。透過掌握字典的操作,可以大幅提升程式設計的效率和可讀性。

Python 中的 Tuples、Sets 和 Dictionaries 深入解析

在 Python 程式設計中,Tuples、Sets 和 Dictionaries 是三種非常重要的資料結構,它們各自具有獨特的特性與應用場景。本篇文章將探討這三種資料結構的概念、操作方法和實際應用案例。

Tuples 的特性與應用

Tuples 是一種不可變的序列資料型態,可以儲存多個不同型別的元素。與 List 不同,Tuples 的內容一旦建立就無法修改,這使得 Tuples 成為儲存固定資料的理想選擇。

將八進位數字轉換為二進位表示

以下是一個將八進位數字轉換為二進位表示的範例程式碼:

def Convert_Oct_Bin(octal, octToBinaryTable):
    binary = ''
    for digit in octal:
        binary = binary + octToBinaryTable[digit]
    return binary

octToBinaryTable = {
    '0': '000', '1': '001', '2': '010',
    '3': '011', '4': '100', '5': '101',
    '6': '110', '7': '111'
}

print(Convert_Oct_Bin("553", octToBinaryTable))  # 輸出:101101011
print(Convert_Oct_Bin("127", octToBinaryTable))  # 輸出:001010111

程式碼解析

  1. 函式定義Convert_Oct_Bin 函式接受兩個引數:八進位數字字串和一個對應表。
  2. 轉換邏輯:遍歷八進位數字的每個字元,利用對應表將其轉換為三位二進位表示並串接起來。
  3. 輸出結果:最終傳回完整的二進位表示字串。

使用 Dictionaries 表示多項式

在 Python 中,Dictionaries 可用於表示多項式,其中鍵代表變數的冪次,值代表對應的係數。

多項式表示範例

考慮多項式 $P(Y) = -2 + Y^2 + 3Y^6$,可以使用 Dictionary 表示為:

P = {0: -2, 2: 1, 6: 3}

這種表示方法相比於 List 更為節省空間,尤其是在處理高次多項式時。

評估多項式的值

以下是一個評估多項式值的範例程式碼:

def Eval_Poly(P, X):
    total = 0
    for power in P:
        total += P[power] * (X ** power)
    print('多項式評估結果:', total)

P = {0: -2, 2: 1, 3: 3}
Eval_Poly(P, 2)  # 輸出:26

程式碼解析

  1. 函式定義Eval_Poly 函式接受兩個引數:表示多項式的 Dictionary 和變數的值。
  2. 評估邏輯:遍歷 Dictionary 中的每個鍵值對,將係數與變數的冪次相乘後累加。
  3. 輸出結果:最終輸出多項式的評估結果。

Orange Cap 計算器實作

Orange Cap 是板球比賽中頒發給單一賽事中最高得分球員的獎項。以下是一個計算 Orange Cap 得主的 Python 程式:

def orangecap(matches):
    total_scores = {}
    for match in matches:
        for player, score in matches[match].items():
            if player in total_scores:
                total_scores[player] += score
            else:
                total_scores[player] = score
    
    max_score = -1
    top_player = ''
    for player, score in total_scores.items():
        if score > max_score:
            max_score = score
            top_player = player
    
    return (top_player, max_score)

result = orangecap({
    'test1': {'Dhoni': 74, 'Kohli': 150},
    'test2': {'Dhoni': 29, 'Pujara': 42}
})
print(result)  # 輸出:('Kohli', 150)

程式碼解析

  1. 函式定義orangecap 函式接受一個包含各場比賽球員得分的 Dictionary。
  2. 計算總分:遍歷所有比賽,累計每個球員的總得分。
  3. 找出最高得分者:比較所有球員的總得分,找出最高得分者及其得分。

Tuples、Sets 與 Dictionaries 的深入解析

在 Python 程式設計中,Tuples、Sets 和 Dictionaries 是三種重要且常用的資料結構。本篇文章將探討這三種資料結構的特性、使用方法以及常見的應用場景,並提供實用的範例和練習題,以幫助讀者更好地理解和掌握這些概念。

Tuples 的基本概念與操作

Tuple 是 Python 中的一種不可變(immutable)資料結構,用於儲存多個元素。Tuple 的元素可以是任意資料型別,包括數字、字串、列表等。Tuple 的定義使用小括號 (),元素之間以逗號分隔。

建立 Tuple

建立 Tuple 的基本語法如下:

my_tuple = (1, 2, 3, "hello", 4.5)

Tuple 的特性

  1. 不可變性:Tuple 的元素一旦建立後就不能被修改。
  2. 有序性:Tuple 中的元素是有序的,可以透過索引存取。

Tuple 的操作

  1. 索引與切片:Tuple 支援索引和切片操作,用於存取特定的元素或子集合。

    my_tuple = (1, 2, 3, 4, 5)
    print(my_tuple[0])  # 輸出:1
    print(my_tuple[1:3])  # 輸出:(2, 3)
    
  2. 連線與重複:可以使用 + 運算元連線兩個 Tuple,使用 * 運算元重複 Tuple 中的元素。

    tuple1 = (1, 2)
    tuple2 = (3, 4)
    print(tuple1 + tuple2)  # 輸出:(1, 2, 3, 4)
    print(tuple1 * 3)  # 輸出:(1, 2, 1, 2, 1, 2)
    

Sets 的基本概念與操作

Set 是 Python 中的一種無序且不重複的資料結構,用於儲存多個唯一的元素。Set 的定義使用大括號 {}set() 函式。

建立 Set

建立 Set 的基本語法如下:

my_set = {1, 2, 3, "hello"}
# 或者
my_set = set([1, 2, 3, "hello"])

Set 的特性

  1. 無序性:Set 中的元素是無序的,不能透過索引存取。
  2. 唯一性:Set 中的元素是唯一的,不允許重複。

Set 的操作

  1. 新增與刪除元素:可以使用 add() 方法新增元素,使用 remove()discard() 方法刪除元素。

    my_set = {1, 2}
    my_set.add(3)
    print(my_set)  # 輸出:{1, 2, 3}
    my_set.remove(2)
    print(my_set)  # 輸出:{1, 3}
    
  2. 集合運算:Set 支援多種集合運算,包括聯集、交集、差集和對稱差集。

    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    print(set1.union(set2))  # 輸出:{1, 2, 3, 4, 5}
    print(set1.intersection(set2))  # 輸出:{3}
    print(set1.difference(set2))  # 輸出:{1, 2}
    print(set1.symmetric_difference(set2))  # 輸出:{1, 2, 4, 5}
    

Dictionaries 的基本概念與操作

Dictionary 是 Python 中的一種鍵值對(key-value pair)資料結構,用於儲存多個鍵值對。Dictionary 的定義使用大括號 {}

建立 Dictionary

建立 Dictionary 的基本語法如下:

my_dict = {"name": "John", "age": 30}

Dictionary 的特性

  1. 鍵的唯一性:Dictionary 中的鍵是唯一的,不允許重複。
  2. 值的任意性:Dictionary 中的值可以是任意資料型別。

Dictionary 的操作

  1. 新增與修改鍵值對:可以使用指定陳述式新增或修改鍵值對。

    my_dict = {"name": "John"}
    my_dict["age"] = 30
    print(my_dict)  # 輸出:{'name': 'John', 'age': 30}
    
  2. 存取值:可以使用鍵存取值。

    my_dict = {"name": "John", "age": 30}
    print(my_dict["name"])  # 輸出:John
    

常見問題與解答

Q: Tuple 和 List 有什麼區別?

A: Tuple 是不可變的,而 List 是可變的。Tuple 使用小括號 () 定義,而 List 使用方括號 [] 定義。

Q: 如何建立一個空的 Set?

A: 可以使用 set() 函式建立一個空的 Set。

Q: Dictionary 中的鍵可以是任意資料型別嗎?

A: 不可以,Dictionary 中的鍵必須是不可變的資料型別,如字串、整數或 Tuple。

使用Turtle圖形模組進行圖形程式設計

Turtle圖形模組是Python內建的一個圖形套件,允許使用者繪製線條、圓形及其他形狀,包括文字。Turtle本質上是一個螢幕上的遊標,用於繪製圖形。匯入Turtle模組後,程式設計師可以存取Python中的所有圖形函式。

開始使用Turtle模組

要開始使用Turtle模組,可以採用Python的互動模式(命令列)或指令碼模式。以下是使用互動模式的步驟:

  1. 啟動Python,輸入import Turtle以匯入Turtle模組。
  2. 輸入Turtle.showTurtle()以顯示Turtle的目前位置和方向。

執行上述陳述式後,Python的Turtle圖形視窗將會顯示出來。

在任意方向上移動Turtle

Turtle是一個物件,當匯入Turtle模組時就會被建立。預設情況下,Turtle的位置被設定在Turtle圖形視窗的中心,其方向被設定為向右。

Turtle模組提供了多種方法來移動Turtle,包括:

  • Turtle.forward(P):將Turtle向前移動P畫素。
  • Turtle.left(angle):將Turtle向左旋轉指定的角度。
  • Turtle.right(angle):將Turtle向右旋轉指定的角度。
  • Turtle.backward(P):將Turtle向後移動P畫素。

程式碼範例1:繪製正方形

import Turtle

Turtle.forward(100)
Turtle.left(90)
Turtle.forward(100)
Turtle.left(90)
Turtle.forward(100)
Turtle.left(90)
Turtle.forward(100)

內容解密:

此程式碼範例展示瞭如何使用Turtle模組繪製一個正方形。首先,將Turtle向前移動100畫素,然後向左旋轉90度,重複此過程四次,即可完成正方形的繪製。

控制Turtle的畫筆狀態

Turtle模組提供了多種方法來控制畫筆的狀態,包括:

  • Turtle.pendown():將畫筆放下,開始繪圖。
  • Turtle.penup():將畫筆抬起,停止繪圖。
  • Turtle.pensize(width):設定畫筆的寬度。

程式碼範例2:控制畫筆狀態

import Turtle

Turtle.penup()
Turtle.forward(100)
Turtle.pendown()
Turtle.forward(100)
Turtle.pensize(5)
Turtle.forward(100)

內容解密:

此程式碼範例展示瞭如何控制畫筆的狀態。首先,將畫筆抬起並向前移動100畫素,然後將畫筆放下並向前移動100畫素,最後設定畫筆的寬度為5並向前移動100畫素。

將Turtle移動到任意位置

預設情況下,Turtle的位置在圖形視窗的中心。要將Turtle移動到其他位置,可以使用相關的方法。

繪製基本形狀

使用Turtle模組可以繪製各種基本形狀,如線條、圓形、多邊形等。

程式碼範例3:繪製多邊形

import Turtle

for _ in range(8):
    Turtle.forward(50)
    Turtle.left(45)

內容解密:

此程式碼範例展示瞭如何使用迴圈繪製一個正八邊形。透過重複將Turtle向前移動50畫素並向左旋轉45度的動作,即可完成多邊形的繪製。

使用顏色繪圖

Turtle模組支援使用顏色繪圖,可以設定畫筆的顏色和背景顏色。

使用列表動態改變顏色

可以透過列表來動態改變畫筆的顏色,從而實作色彩豐富的圖形效果。

使用Turtles建立長條圖

可以利用多個Turtles來建立長條圖,以視覺化的方式呈現資料。

程式碼範例4:使用Turtles建立長條圖

import Turtle

# 設定初始位置
Turtle.penup()
Turtle.goto(-200, -200)
Turtle.pendown()

# 繪製長條圖
data = [10, 20, 30, 40, 50]
for value in data:
    Turtle.begin_fill()
    for _ in range(2):
        Turtle.forward(value)
        Turtle.left(90)
        Turtle.forward(20)
        Turtle.left(90)
    Turtle.end_fill()
    Turtle.penup()
    Turtle.forward(30)
    Turtle.pendown()

內容解密:

此程式碼範例展示瞭如何使用多個Turtles建立一個簡單的長條圖。首先,設定初始位置,然後根據資料值繪製每個長條,並使用begin_fill()end_fill()方法填充顏色。最後,將畫筆向前移動以繪製下一個長條。