一、引言:為什么數據類型如此重要?
在 Python 編程中,數據類型決定了:
- 數據的存儲方式
- 可以對數據執行的操作
- 數據的取值范圍
- 不同類型之間的運算規則
理解數據類型是編寫正確、高效程序的基礎。Python 是動態類型語言,雖然你不需要顯式聲明類型,但必須清楚每個變量的類型及其行為。
二、Python 內置核心數據類型概覽
Python 提供了豐富的內置數據類型,主要分為以下幾類:
類別 | 數據類型 | 說明 |
數字類型 |
| 數值計算 |
文本類型 |
| 字符串處理 |
布爾類型 |
| 邏輯判斷 |
序列類型 |
| 有序數據集合 |
映射類型 |
| 鍵值對存儲 |
集合類型 |
| 無序唯一元素集合 |
二進制類型 |
| 二進制數據處理 |
💡 本文將重點講解最常用的核心類型。
三、數字類型(Numeric Types)
1. 整數(int)
表示整數值,沒有大小限制(僅受內存限制)。
age = 25
temperature = -10
big_number = 123456789012345678901234567890
常用操作:
a = 10
b = 3print(a + b) # 13 加法
print(a - b) # 7 減法
print(a * b) # 30 乘法
print(a / b) # 3.333... 除法(結果為 float)
print(a // b) # 3 整除
print(a % b) # 1 取余
print(a ** b) # 1000 冪運算
?? 注意:/
運算符總是返回浮點數,即使結果是整數(如 4 / 2
返回 2.0
)。
2. 浮點數(float)
表示帶小數點的數字,遵循 IEEE 754 標準。
price = 19.99
pi = 3.1415926535
scientific = 1.5e-4 # 科學計數法,等于 0.00015
浮點數精度問題:
print(0.1 + 0.2) # 輸出:0.30000000000000004
print(0.1 + 0.2 == 0.3) # False!
? 解決方案:使用 decimal
模塊進行高精度計算(如金融計算):
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2') == Decimal('0.3')) # True
3. 復數(complex)(了解即可)
用于數學和工程計算,形式為 a + bj
。
z = 3 + 4j
print(z.real) # 3.0
print(z.imag) # 4.0
四、文本類型:字符串(str)
字符串是字符的序列,用單引號、雙引號或三引號包圍。
name = "Alice"
message = 'Hello, World!'
multi_line = """這是一個
多行字符串"""
字符串的常用操作
1. 字符串拼接
first = "Hello"
last = "World"
full = first + " " + last # "Hello World"
? 推薦使用 f-string(Python 3.6+):
name = "Alice"
age = 25
print(f"我是{name},今年{age}歲。")
2. 字符串索引與切片
text = "Python"print(text[0]) # 'P' 第一個字符
print(text[-1]) # 'n' 最后一個字符
print(text[1:4]) # 'yth' 切片 [start:end)
print(text[:3]) # 'Pyt' 從開頭到索引3(不含)
print(text[3:]) # 'hon' 從索引3到結尾
3. 常用字符串方法
方法 | 說明 | 示例 |
| 轉大寫 |
→ |
| 轉小寫 |
→ |
| 去除首尾空白 |
→ |
| 替換 |
→ |
| 分割 |
→ |
| 連接 |
→ |
| 查找位置 |
→ |
| 是否以某字符串開頭 |
→ |
email = " Alice@EXAMPLE.COM "
clean_email = email.strip().lower()
print(clean_email) # "alice@example.com"
五、布爾類型(bool)
布爾值只有兩個:True
和 False
,用于邏輯判斷。
is_student = True
has_permission = False
布爾值的來源:
- 比較運算的結果
- 條件判斷的結果
- 任何對象都可以被“真值測試”
print(5 > 3) # True
print(10 == 10) # True
print("hello" != "") # True# 真值測試(Truthiness)
print(bool(1)) # True
print(bool(0)) # False
print(bool("abc")) # True
print(bool("")) # False
print(bool([1, 2])) # True
print(bool([])) # False
? 規則:空值(0
, ""
, []
, {}
, None
)為 False
,其他為 True
。
六、序列類型
1. 列表(list)—— 有序、可變
列表是最常用的數據結構,可以存儲不同類型的數據。
fruits = ["蘋果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4, 5]
mixed = ["Alice", 25, True, 3.14]
列表的常用操作:
# 訪問元素
print(fruits[0]) # "蘋果"
print(fruits[-1]) # "橙子"# 修改元素
fruits[1] = "葡萄"# 添加元素
fruits.append("草莓") # 末尾添加
fruits.insert(1, "芒果") # 在索引1處插入# 刪除元素
fruits.remove("蘋果") # 刪除指定值
del fruits[0] # 刪除索引0的元素
popped = fruits.pop() # 彈出并返回末尾元素# 列表長度
print(len(fruits))# 列表切片(同字符串)
print(numbers[1:4]) # [2, 3, 4]# 遍歷列表
for fruit in fruits:print(fruit)
列表推導式(List Comprehension)
一種簡潔創建列表的方式:
# 普通方式
squares = []
for x in range(1, 6):squares.append(x**2)# 推導式方式(推薦)
squares = [x**2 for x in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]# 帶條件的推導式
evens = [x for x in range(10) if x % 2 == 0]
2. 元組(tuple)—— 有序、不可變
元組與列表相似,但創建后不能修改。
coordinates = (10, 20)
person = ("張三", 25, "北京")
single_item = (42,) # 單個元素的元組,必須加逗號
元組的特點:
- 更安全:防止意外修改
- 性能略高:占用內存更少
- 可作為字典的鍵(列表不行)
# 訪問元素(同列表)
print(person[0]) # "張三"# 不可修改
# person[0] = "李四" # TypeError!
3. range 對象
表示一個不可變的數字序列,常用于 for
循環。
r1 = range(5) # 0, 1, 2, 3, 4
r2 = range(1, 6) # 1, 2, 3, 4, 5
r3 = range(0, 10, 2) # 0, 2, 4, 6, 8 (步長為2)for i in range(3):print(i) # 0, 1, 2
💡 range
不是列表,但可以轉換:
list(range(5)) # [0, 1, 2, 3, 4]
七、映射類型:字典(dict)
字典是鍵值對(key-value)的集合,類似于現實生活中的“字典”。
student = {"name": "王五","age": 22,"city": "上海","grades": [85, 90, 78]
}
字典的常用操作:
# 訪問值
print(student["name"]) # "王五"
print(student.get("age")) # 22
print(student.get("phone", "未知")) # 安全訪問,鍵不存在時返回默認值# 修改/添加值
student["age"] = 23 # 修改
student["major"] = "計算機" # 添加新鍵值對# 刪除鍵值對
del student["city"]
popped = student.pop("grades") # 彈出并返回值# 遍歷字典
for key in student:print(f"{key}: {student[key]}")# 推薦的遍歷方式
for key, value in student.items():print(f"{key}: {value}")# 獲取所有鍵、值、鍵值對
print(student.keys()) # dict_keys(['name', 'age', 'major'])
print(student.values()) # dict_values(['王五', 23, '計算機'])
print(student.items()) # dict_items([('name', '王五'), ...])
字典推導式
# 創建平方數字典
squares_dict = {x: x**2 for x in range(1, 6)}
print(squares_dict) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
八、集合類型
1. 集合(set)—— 無序、唯一
集合存儲不重復的元素,且無序。
unique_numbers = {1, 2, 3, 3, 4}
print(unique_numbers) # {1, 2, 3, 4} 重復的3被自動去除
集合的常用操作:
set1 = {1, 2, 3}
set2 = {3, 4, 5}# 并集
print(set1 | set2) # {1, 2, 3, 4, 5}
print(set1.union(set2))# 交集
print(set1 & set2) # {3}
print(set1.intersection(set2))# 差集
print(set1 - set2) # {1, 2}
print(set1.difference(set2))# 對稱差集
print(set1 ^ set2) # {1, 2, 4, 5}# 添加/刪除
set1.add(4)
set1.remove(1) # 元素必須存在
set1.discard(10) # 元素不存在也不會報錯
2. 凍結集合(frozenset)
不可變的集合,可以作為字典的鍵。
fset = frozenset([1, 2, 3])
# fset.add(4) # AttributeError!
九、類型轉換(Type Casting)
Python 允許在不同類型之間轉換。
函數 | 說明 | 示例 |
int(x) | 將參數轉換為整數類型 | int("123") → 123 |
float(x) | 將參數轉換為浮點數類型 | float("3.14") → 3.14 |
str(x) | 將參數轉換為字符串類型 | str(100) → "100" |
bool(x) | 將參數轉換為布爾值類型 | bool(1) → True |
list(x) | 將參數轉換為列表類型 | list("abc") → ['a', 'b', 'c'] |
tuple(x) | 將參數轉換為元組類型 | tuple([1, 2]) → (1, 2) |
set(x) | 將參數轉換為集合類型,去除重復元素 | set([1, 2, 2]) → {1, 2} |
dict(x) | 將一系列鍵值對轉換為字典類型 | 需要提供鍵值對序列 |
請注意,對于`dict(x)`函數的具體示例,通常需要給出一個由鍵值對組成的可迭代對象作為輸入。例如,可以使用列表中的元組來創建字典:dict([("key1", "value1"), ("key2", "value2")])將會得到{"key1": "value1", "key2": "value2"}這樣的結果。
# 示例:用戶輸入通常是字符串,需要轉換
age_str = input("請輸入年齡:") # "25"
age_int = int(age_str)
print(age_int + 5) # 30
?? 轉換失敗會拋出異常:
int("abc") # ValueError!
十、總結:Python 數據類型核心要點
類型 | 可變性 | 有序性 | 唯一性 | 典型用途 |
| ? | ? | ? | 數值計算 |
| ? | ? | ? | 文本處理 |
| ? | ? | ? | 邏輯判斷 |
| ? | ? | ? | 存儲有序數據列表 |
| ? | ? | ? | 存儲不可變數據序列 |
| ? | ?(Python 3.7+) | 鍵唯一 | 存儲鍵值對映射 |
| ? | ? | ? | 存儲唯一元素集合 |
學習建議:
- 熟練掌握
int
,float
,str
,bool
,list
,dict
—— 這是最常用的五種類型。 - 理解可變與不可變的區別:
list
可變,tuple
不可變。 - 善用推導式:讓代碼更簡潔高效。
- 注意類型轉換:特別是用戶輸入和文件讀取時。
📌 動手練習:
- 創建一個包含你個人信息的字典(姓名、年齡、城市等)。
- 創建一個列表,存儲你喜歡的電影,并用
for
循環打印。 - 使用
set
找出兩個列表的共同元素。
# 示例練習
my_info = {"name": "你的名字", "age": 20, "hobbies": ["閱讀", "編程"]}
print(f"我叫{my_info['name']},愛好是{', '.join(my_info['hobbies'])}。")