【Python入門】型別轉換(Casting)完全指南|徹底解析數值、字串、列表的轉換方法

目次

1. 前言

Python 是一種具備簡潔語法與強大功能的程式語言,從初學者到進階使用者都廣泛使用。其中,「型別轉換(Casting)」是處理資料時不可或缺的重要技巧之一。

本文將詳細解說 Python 的型別轉換(Casting),並搭配程式碼範例說明,讓初學者也能輕鬆理解。閱讀本篇文章後,你將能學到以下內容:

  • Python 中型別轉換的基本概念
  • 明確型別轉換與隱性型別轉換的差異
  • 具體的型別轉換方法與注意事項
  • 常見錯誤及其避免方法

理解型別轉換能讓資料處理更加靈活,也能避免程式中的錯誤。特別是在處理不同資料型別時,進行正確的型別轉換是非常重要的。

2. 什麼是型別轉換(Casting)?【Python 基礎】

2.1 型別轉換的定義

型別轉換(Casting)是指將一種資料型別轉換成另一種資料型別。舉例來說,可以將整數轉換為字串,或是將字串轉換為數值。

以下情況中常常需要進行型別轉換:

  • 想要將使用者輸入(通常為字串)轉換成數值以便進行運算
  • 想將數值列表轉換為字串,以進行格式化處理
  • 在 Python 的內部處理中,需正確處理不同型別的資料

在 Python 中,可以使用內建函式輕鬆完成型別轉換。

2.2 明確型別轉換(Explicit Type Conversion)

明確型別轉換 是指開發者 主動 將某個資料型別轉換為其他型別。在 Python 中,可以使用以下函式來進行明確型別轉換:

轉換函式說明範例
int()將字串或浮點數轉換為整數int("10")10
float()將字串或整數轉換為浮點數float("3.14")3.14
str()將數值或列表等轉換為字串str(100)"100"
list()將元組或字串轉換為列表list("abc")['a', 'b', 'c']
tuple()將列表轉換為元組tuple([1, 2, 3])(1, 2, 3)
dict()將鍵值對轉換為字典dict([(1, 'a'), (2, 'b')]){1: 'a', 2: 'b'}

範例:明確型別轉換

# 將整數轉換為字串
num = 10
str_num = str(num)
print(str_num)  # "10"
print(type(str_num))  # <class 'str'>

# 將字串轉換為浮點數
float_num = float("3.14")
print(float_num)  # 3.14
print(type(float_num))  # <class 'float'>

2.3 隱性型別轉換(Implicit Type Conversion)

隱性型別轉換 是指 Python 會自動將資料型別進行轉換,開發者不需要特別指定,Python 內部會自動處理。

範例:隱性型別轉換

num_int = 10  # 整數型別
num_float = 2.5  # 浮點數型別

# 整數 + 浮點數 → 自動轉換為浮點數
result = num_int + num_float
print(result)  # 12.5
print(type(result))  # <class 'float'>

像這樣,Python 會根據運算結果,自動調整資料型別以確保結果正確。

2.4 使用型別轉換的優點與注意事項

型別轉換的優點

  • 能正確處理像使用者輸入等各種資料
  • 允許不同型別的資料進行運算與操作
  • 透過明確轉換,可以讓程式邏輯更清晰、更易於除錯

⚠️ 型別轉換的注意事項

  • 不當的型別轉換會導致錯誤
    例如:int("abc") 會產生 ValueError
  • 過度依賴隱性型別轉換可能導致 bug
    例如:將整數與字串直接相加會產生 TypeError
  • 型別轉換需要耗費資源
    處理大量資料時需考慮效能問題

前往下一節

侍エンジニア塾

3. Python 的資料型別與轉換方式

3.1 Python 的主要資料型別

Python 中有以下幾種常見的基本資料型別:

資料型別說明範例
int(整數)用來表示整數的型別10, -5, 1000
float(浮點數)包含小數點的數值3.14, -2.5, 1.0
str(字串)由文字組成的資料"Hello", 'Python'
bool(布林值)表示 TrueFalseTrue, False
list(串列)用來儲存多個元素的集合[1, 2, 3], ['a', 'b', 'c']
tuple(元組)不可變動的串列(1, 2, 3), ('x', 'y')
dict(字典)由鍵與值組成的對應關係{'name': 'Alice', 'age': 25}
set(集合)不允許重複元素的資料集合{1, 2, 3}, {'apple', 'banana'}

3.2 各種資料型別的轉換方式

3.2.1 轉換為數值型別(int, float)

num_str = "100"
num_int = int(num_str)  # 將字串 "100" 轉換為整數 100
num_float = float(num_int)  # 將整數 100 轉換為浮點數 100.0

print(num_int, type(num_int))  # 100 <class 'int'>
print(num_float, type(num_float))  # 100.0 <class 'float'>

3.2.2 轉換為字串(str)

num = 42
str_num = str(num)  # 將整數 42 轉換為字串 "42"
print(str_num, type(str_num))  # "42" <class 'str'>

3.2.3 轉換為串列(list)、元組(tuple)、集合(set)

tuple_data = (1, 2, 3)
list_data = list(tuple_data)  # 將元組轉換為串列
print(list_data, type(list_data))  # [1, 2, 3] <class 'list'>

list_data = [4, 5, 6]
tuple_data = tuple(list_data)  # 將串列轉換為元組
print(tuple_data, type(tuple_data))  # (4, 5, 6) <class 'tuple'>

3.2.4 轉換為字典(dict)

list_of_pairs = [[1, 'apple'], [2, 'banana']]
dict_data = dict(list_of_pairs)  # 將鍵值對的串列轉換為字典
print(dict_data, type(dict_data))  # {1: 'apple', 2: 'banana'} <class 'dict'>

3.3 資料型別轉換總結

在 Python 中,可以使用像是 int()float()str() 等內建函式,輕鬆地將各種資料型別互相轉換。

轉換函式說明範例
int(x)轉換為整數int("100")100
float(x)轉換為浮點數float("3.14")3.14
str(x)轉換為字串str(42)"42"
list(x)轉換為串列list((1, 2, 3))[1, 2, 3]
tuple(x)轉換為元組tuple([1, 2, 3])(1, 2, 3)
set(x)轉換為集合set([1, 2, 2, 3]){1, 2, 3}
dict(x)轉換為字典dict([(1, 'a'), (2, 'b')]){1: 'a', 2: 'b'}

4. 明確型別轉換(Casting)的方式【含程式範例】

在 Python 中,可以透過「明確型別轉換(Explicit Type Conversion)」來有意識地改變資料的型別。
這表示開發者使用 int()str() 等內建函式,手動進行型別轉換。

4.1 轉換為整數(int)

# 將字串轉換為整數
num1 = int("10")
print(num1, type(num1))  # 10 <class 'int'>

# 將浮點數轉換為整數(小數部分會被捨去)
num2 = int(3.99)
print(num2)  # 3

# 將布林值轉換為整數
num3 = int(True)
num4 = int(False)
print(num3, num4)  # 1 0

4.2 轉換為浮點數(float)

# 將字串轉換為浮點數
num1 = float("10.5")
print(num1, type(num1))  # 10.5 <class 'float'>

# 將整數轉換為浮點數
num2 = float(10)
print(num2)  # 10.0

4.3 轉換為字串(str)

# 將數值轉換為字串
num1 = str(100)
num2 = str(3.14)
print(num1, type(num1))  # "100" <class 'str'>
print(num2, type(num2))  # "3.14" <class 'str'>

4.4 轉換為串列(list)

# 將元組轉換為串列
tuple_data = (1, 2, 3)
list_data = list(tuple_data)
print(list_data, type(list_data))  # [1, 2, 3] <class 'list'>

# 將字串轉換為串列
str_data = "hello"
list_chars = list(str_data)
print(list_chars)  # ['h', 'e', 'l', 'l', 'o']

4.5 轉換為元組(tuple)

# 將串列轉換為元組
list_data = [1, 2, 3]
tuple_data = tuple(list_data)
print(tuple_data, type(tuple_data))  # (1, 2, 3) <class 'tuple'>

4.6 轉換為集合(set)

# 將串列轉換為集合(自動去除重複值)
list_data = [1, 2, 2, 3, 3, 3]
set_data = set(list_data)
print(set_data, type(set_data))  # {1, 2, 3} <class 'set'>

4.7 轉換為字典(dict)

# 將由子串列組成的串列轉換為字典
list_of_pairs = [[1, 'apple'], [2, 'banana']]
dict_data = dict(list_of_pairs)
print(dict_data)  # {1: 'apple', 2: 'banana'}

4.8 小結

明確型別轉換是提升 Python 程式靈活性的重要技巧。
只要善用 int()float()str() 等函式,就可以輕鬆完成不同資料型別之間的轉換。

轉換函式說明
int(x)轉換為整數
float(x)轉換為浮點數
str(x)轉換為字串
list(x)轉換為串列
tuple(x)轉換為元組
set(x)轉換為集合
dict(x)轉換為字典

5. 隱性型別轉換(Python 自動轉換)

5.1 什麼是 Python 的自動型別轉換?

隱性型別轉換是指 即使開發者沒有明確指定,Python 也會自動將資料轉換為適合的型別

Python 的隱性轉換主要發生在 數值型別(int、float、complex) 的運算中。

範例:整數(int)與浮點數(float)的運算

num_int = 10   # 整數
num_float = 2.5  # 浮點數

result = num_int + num_float  # Python 自動將 int 轉為 float
print(result, type(result))  # 12.5 <class 'float'>

5.2 會觸發隱性型別轉換的情況有哪些?

情況 1:整數(int) → 浮點數(float)

a = 5
b = 2.0
result = a / b  # Python 自動將 int 轉為 float
print(result, type(result))  # 2.5 <class 'float'>

情況 2:整數(int) → 複數(complex)

a = 10   # int
b = 2 + 3j  # complex(虛數)
result = a + b
print(result, type(result))  # (12+3j) <class 'complex'>

情況 3:布林值(bool) → 整數或浮點數(int, float)

print(True + 2)   # 3  (True 被視為 1)
print(False + 3.5)  # 3.5 (False 被視為 0)

5.3 隱性型別轉換的注意事項與避免方式

⚠️ 注意 1:字串(str)與數值型別混用會出錯

num = 10
text = "元"

# 這樣會產生錯誤
# print(num + text)  # TypeError

# 正確寫法
print(str(num) + text)  # "10元"

⚠️ 注意 2:串列或字典無法自動轉換

num_list = [1, 2, 3]

# 這樣會出錯
# print(num_list + 10)  # TypeError

# 正確寫法
num_list.append(10)
print(num_list)  # [1, 2, 3, 10]

5.4 隱性型別轉換的優缺點

優點

  • 開發者不需手動轉換,也能正確執行運算
  • 像是 intfloatintcomplex轉換過程不會失去精度
  • bool 可以作為數值使用,例如 True + 1 == 2

⚠️ 缺點

  • 非預期的型別轉換可能會導致錯誤(例如 int 被自動轉為 float,可能會出現精度誤差)
  • 集合(list、dict 等)不會自動轉換,需要手動處理

5.5 小結

在 Python 中,主要針對數值型別執行隱性型別轉換,讓開發者即使不手動進行轉換,也能順利完成運算。

原始型別轉換後型別範例
intfloatfloat10 + 2.5 → 12.5
intcomplexcomplex10 + (2+3j) → (12+3j)
boolintintTrue + 1 → 2

6. Python 型別轉換常見錯誤與對應解法

6.1 進行型別轉換時常見的錯誤類型

在 Python 中進行型別轉換(Casting)時,常會遇到以下錯誤:

錯誤類型發生原因範例
ValueError嘗試轉換無效的資料int("abc")
TypeError不同型別間進行不當操作10 + "5"
KeyError使用不存在的 key 存取字典my_dict["missing_key"]
AttributeError使用了該型別不支援的方法10.append(5)

6.2 ValueError: 無效的值轉換

# 無法將 "abc" 轉換為整數
num = int("abc")  # ValueError

解法

user_input = "abc"

if user_input.isdigit():
    num = int(user_input)
    print(num)
else:
    print("無法轉換為數字")

6.3 TypeError: 不相容型別的操作

num = 10
text = "元"
print(num + text)  # TypeError

解法

print(str(num) + text)  # "10元"

6.4 KeyError: 存取不存在的字典鍵

my_dict = {"name": "Alice", "age": 25}
print(my_dict["gender"])  # KeyError

解法

print(my_dict.get("gender", "無此資訊"))  # "無此資訊"

6.5 AttributeError: 使用不存在的方法或屬性

num = 10
num.append(5)  # AttributeError

解法

if hasattr(num, "append"):
    num.append(5)
else:
    print("此物件沒有 append() 方法")

6.6 ZeroDivisionError: 被 0 除錯誤

result = 10 / 0  # ZeroDivisionError

解法

num = 10
denominator = 0

if denominator != 0:
    result = num / denominator
    print(result)
else:
    print("除數不能為零")

6.7 IndexError: 串列索引超出範圍

my_list = [1, 2, 3]
print(my_list[5])  # IndexError

解法

index = 5
if 0 <= index < len(my_list):
    print(my_list[index])
else:
    print("索引超出範圍")

6.8 TypeError: 函式參數型別錯誤

def add_numbers(a: int, b: int):
    return a + b

print(add_numbers(10, "20"))  # TypeError

解法

def add_numbers(a, b):
    if isinstance(a, (int, float)) and isinstance(b, (int, float)):
        return a + b
    else:
        return "請輸入數值型別"

print(add_numbers(10, "20"))  # "請輸入數值型別"

6.9 小結

進行型別轉換時,以下錯誤特別常見,因此要事先做好處理:

錯誤發生原因對策
ValueError嘗試將無效值進行轉換使用 isdigit() 檢查
TypeError操作不相容的資料型別使用 str() 等明確轉換
KeyError存取不存在的字典鍵使用 dict.get()
AttributeError呼叫不存在的方法使用 hasattr() 檢查
ZeroDivisionError除數為零事先確認除數是否為零
IndexError索引超出串列長度使用 if index < len(list) 檢查

7. 【實戰應用】Python 型別轉換的活用方法|搭配程式碼範例

7.1 將使用者輸入轉換為數值後進行計算

age = input("請輸入您的年齡: ")  # 使用者輸入為字串(str)
if age.isdigit():  # 檢查是否為數字
    age = int(age)  # 轉換為整數
    print(f"10年後您將會是 {age + 10} 歲。")
else:
    print("請輸入有效的數字。")

7.2 將串列中的數字轉為字串並結合

numbers = [10, 20, 30, 40]
str_numbers = [str(num) for num in numbers]  # 將每個元素轉為字串
result = ", ".join(str_numbers)
print(result)  # "10, 20, 30, 40"

7.3 處理 CSV 資料時的型別轉換

csv_data = [
    ["Alice", "25", "170.5"],
    ["Bob", "30", "180.2"],
]

for row in csv_data:
    name = row[0]
    age = int(row[1])  # 年齡轉為整數
    height = float(row[2])  # 身高轉為浮點數
    print(f"{name} 今年 {age} 歲,身高為 {height} 公分。")

7.4 解析 JSON 時進行型別轉換

import json

json_str = '{"name": "Alice", "age": "25", "height": "170.5"}'
data = json.loads(json_str)

data["age"] = int(data["age"])
data["height"] = float(data["height"])

print(data)  # {'name': 'Alice', 'age': 25, 'height': 170.5}

7.5 將字典的鍵轉為數字

data = {"1": "apple", "2": "banana", "3": "cherry"}

new_data = {int(k): v for k, v in data.items()}
print(new_data)  # {1: 'apple', 2: 'banana', 3: 'cherry'}

7.6 將計算結果四捨五入或捨去

num = 3.75

# 四捨五入
rounded_num = round(num)
print(rounded_num)  # 4

# 無條件捨去
truncated_num = int(num)
print(truncated_num)  # 3

7.7 將布林值當作數值使用

print(int(True))  # 1
print(int(False))  # 0

7.8 小結

善用 Python 的型別轉換技巧,可以讓資料處理更簡潔、更穩定。以下是幾個常見的應用場景:

應用場景使用的轉換方式
處理使用者輸入int()float()
將串列中的數據轉為字串[str(x) for x in list]
處理 CSV 或 JSON 資料int()float()
將字典鍵轉為數字{int(k): v for k, v in dict.items()}
將數值四捨五入或捨去round()int()
將布林值當作數值使用int(True) → 1, int(False) → 0

8. 關於 Python 型別轉換的常見問題與解答【FAQ】

8.1 「Casting」與「型別轉換」是一樣的意思嗎?

是的,基本上 「Casting」和「型別轉換(Type Conversion)」是同一個意思
不過,一般來說,「Casting」更常用來指明確的型別轉換(Explicit Type Conversion)

8.2 所有資料型別都可以互相轉換嗎?

不是的,並非所有型別都可以互相轉換。
有些情況下可以轉換,有些則會發生錯誤。以下是一些例子:

✔ 可成功轉換的例子

print(int("10"))        # 10
print(float("3.14"))    # 3.14
print(str(100))         # "100"
print(list("abc"))      # ['a', 'b', 'c']

❌ 無法轉換的例子(會產生錯誤)

print(int("abc"))       # ValueError
print(float("hello"))   # ValueError
print(int([1, 2, 3]))    # TypeError

8.3 是否應避免使用隱性型別轉換?

不需要完全避免。Python 的隱性轉換 在適當情況下非常方便,但若未察覺自動轉換,也可能導致 bug

num_int = 10
num_float = 2.5
result = num_int + num_float  # int + float → float
print(result, type(result))  # 12.5 <class 'float'>

8.4 型別轉換錯誤會發生什麼問題?

失敗的型別轉換會造成以下 三種常見錯誤

錯誤類型發生原因範例
ValueError嘗試轉換無效的資料int("abc")
TypeError不相容型別間進行操作10 + "5"
AttributeError呼叫了不存在的方法10.append(5)

避免錯誤的方法

value = "abc"

if value.isdigit():
    num = int(value)
else:
    print("無法轉換為整數")

8.5 isinstance() 和型別轉換有什麼不同?

isinstance() 是用來 檢查變數的型別,並不會進行轉換。

num = 10
print(isinstance(num, int))    # True
print(isinstance(num, float))  # False

8.6 如何安全地將使用者輸入進行型別轉換?

使用者透過 input() 輸入的資料都是字串(str),因此建議使用 try-except 進行例外處理以避免錯誤:

while True:
    user_input = input("請輸入一個整數: ")

    try:
        num = int(user_input)
        break
    except ValueError:
        print("輸入無效,請輸入整數。")

print(f"您輸入的數字是:{num}")

8.7 小結

我們整理了關於 Python 型別轉換 常見的疑問與解法

問題解答
「Casting」和型別轉換有什麼不同?基本相同,但「Casting」常指明確的轉換
是否所有型別都能轉換?不一定,例如 int("abc") 會產生錯誤
應避免使用隱性型別轉換嗎?適當使用是安全的,但要避免誤用造成 bug
isinstance() 和型別轉換的差別?isinstance() 是檢查型別,不是轉換
如何安全地轉換使用者輸入?使用 try-except 處理例外

9. 小結|立即可用的 Python 型別轉換範例

9.1 Python 型別轉換的重要性

型別轉換(Casting)是 Python 程式設計中 正確處理資料的基本技巧,常見的應用場景包含:

確保資料型別的一致性
實現不同型別資料之間的運算
避免常見錯誤

9.2 Python 的基本型別轉換函式

在 Python 中,可以透過內建函式輕鬆進行明確型別轉換:

轉換函式說明範例
int(x)轉換為整數int("100")100
float(x)轉換為浮點數float("3.14")3.14
str(x)轉換為字串str(100)"100"
list(x)轉換為串列list((1, 2, 3))[1, 2, 3]
tuple(x)轉換為元組tuple([1, 2, 3])(1, 2, 3)
set(x)轉換為集合set([1, 1, 2]){1, 2}
dict(x)轉換為字典dict([(1, 'a'), (2, 'b')]){1: 'a', 2: 'b'}

9.3 Python 的隱性型別轉換

# 整數 + 浮點數 → 自動轉為浮點數
result = 10 + 2.5
print(result, type(result))  # 12.5 <class 'float'>

# 布林值作為數值使用
print(True + 1)   # 2
print(False + 5)  # 5

9.4 型別轉換常見錯誤與對策

錯誤原因對策
ValueError轉換了無效的值使用 isdigit() 檢查是否為數字
TypeError不同型別直接操作使用 str() 等明確轉換
KeyError取用了不存在的字典鍵使用 dict.get() 處理
AttributeError呼叫了不存在的方法先用 hasattr() 確認

安全的型別轉換範例

user_input = "100a"

try:
    num = int(user_input)
    print(f"轉換成功: {num}")
except ValueError:
    print("輸入無效,請輸入數字")

9.5 實用範例:使用型別轉換改善輸入處理

while True:
    user_input = input("請輸入年齡(整數): ")

    if user_input.isdigit():
        age = int(user_input)
        print(f"10年後您將會是 {age + 10} 歲。")
        break
    else:
        print("請輸入有效的整數。")

9.6 型別轉換的最佳實踐

事先檢查資料型別
加入錯誤處理(try-except)
使用適當的轉換函式
不要過度依賴隱性轉換

9.7 結語與學習建議

本篇文章介紹了以下內容:

Python 型別轉換的基本概念
明確轉換的使用方法(int()float()str() 等)
隱性型別轉換(Python 自動處理)
常見錯誤與解決方式
實際應用範例

若想提升你的 Python 寫作效率,不妨親自動手試試看範例程式碼,體會型別轉換的威力!🚀

侍エンジニア塾