人工智能之編程基礎 Python 入門
第五章 基礎數據類型(一)
@
前言
本章節講述python的基礎數據類型,python的基礎數據類型主要包括以下
-
?不可變數據(3 個):?Number(數字)、String(字符串)、Tuple(元組);
-
?可變數據(3 個):?List(列表)、Dictionary(字典)、Set(集合)。
Number(數字)
number(數字)類型用于表示數值數據。Python 提供了多種內置的數字類型,主要包括:
1. 整數 (int)
int 類型用于表示整數,可以是正數、負數或零。Python 3 的 int 類型沒有大小限制(僅受限于可用內存),因此可以處理非常大的整數。
特點:
- 無大小限制
- 可以用十進制、二進制、八進制或十六進制表示
示例:
# 十進制
x = 42
y = -17
z = 0
# 二進制 (以 0b 或 0B 開頭)
binary_num = 0b1010 # 等于十進制的 10
# 八進制 (以 0o 或 0O 開頭)
octal_num = 0o17 # 等于十進制的 15
# 十六進制 (以 0x 或 0X 開頭)
hex_num = 0xFF # 等于十進制的 255
# 大整數
big_num = 123456789012345678901234567890
print(type(big_num)) # <class 'int'>
2. 浮點數 (float)
float 類型用于表示帶有小數點的數字(實數)。它們遵循 IEEE 754 雙精度浮點數標準,通常有大約 17 位有效數字。
特點:
- 有精度限制
- 可能存在浮點數精度問題
- 可以用科學計數法表示
示例:
# 普通浮點數
pi = 3.14159
temperature = -12.5
price = 9.99
# 科學計數法
scientific = 1.5e-3 # 等于 0.0015
large_float = 2.5e8 # 等于 250000000.0
# 浮點數精度問題示例
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)
complex 類型用于表示復數,形式為 a + bj,其中 a 是實部,b 是虛部,j 表示虛數單位(√-1)。
特點:
- 實部和虛部都是浮點數
- 可以通過
.real和.imag屬性訪問實部和虛部
示例:
# 復數
z1 = 3 + 4j
z2 = -2.5 + 1.7j
z3 = 5j # 只有虛部
z4 = 3.0 + 0j # 只有實部
# 訪問實部和虛部
print(z1.real) # 3.0
print(z1.imag) # 4.0
# 復數運算
z_sum = z1 + z2
print(z_sum) # (0.5+5.7j)
# 獲取模長
import cmath
print(abs(z1)) # 5.0
print(cmath.phase(z1)) # 獲取相位
4. 布爾值 (bool)
雖然 bool 類型通常被視為邏輯類型,但在 Python 中它是 int 的子類。True 和 False 分別等價于整數 1 和 0。
示例:
# 布爾值
is_active = True
is_done = False
# 布爾值是 int 的子類
print(isinstance(True, int)) # True
print(True + 1) # 2
print(False * 10) # 0
# 在條件語句中的使用
if True:
print("這總是會執行")
if 1:
print("非零數值被視為 True")
5. 數字類型的轉換
Python 提供了內置函數在不同數字類型之間進行轉換。
轉換函數:
# int() - 轉換為整數
print(int(3.7)) # 3 (向零取整)
print(int("42")) # 42
print(int(True)) # 1
# float() - 轉換為浮點數
print(float(42)) # 42.0
print(float("3.14")) # 3.14
print(float(True)) # 1.0
# complex() - 轉換為復數
print(complex(3, 4)) # (3+4j)
print(complex("2+3j")) # (2+3j)
6. 數字類型的檢查和操作
# 檢查類型
x = 42
y = 3.14
z = 2 + 3j
print(type(x)) # <class 'int'>
print(type(y)) # <class 'float'>
print(type(z)) # <class 'complex'>
# isinstance() 檢查
print(isinstance(x, int)) # True
print(isinstance(y, float)) # True
print(isinstance(z, complex)) # True
# 常用數學運算
a, b = 10, 3
print(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 (冪運算)
7. 內置數學函數
Python 提供了許多內置的數學函數:
# 基本數學函數
print(abs(-5)) # 5
print(round(3.14159, 2)) # 3.14
print(pow(2, 3)) # 8
print(max(1, 5, 3)) # 5
print(min(1, 5, 3)) # 1
# 需要導入 math 模塊
import math
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
print(math.sqrt(16)) # 4.0
print(math.floor(3.7)) # 3
print(math.ceil(3.2)) # 4
print(math.log(10)) # 自然對數
print(math.log10(100)) # 以10為底的對數
String(字符串)
字符串(String) 在python中是一種用于表示文本數據的基本數據類型。字符串是由一系列字符組成的不可變序列。
1. 字符串的創建
Python 中有多種方式創建字符串:
# 使用單引號
s1 = 'Hello World'
# 使用雙引號
s2 = "Hello World"
# 使用三重引號(可以跨行)
s3 = """這是一個
多行字符串"""
s4 = '''也可以
這樣寫'''
# 空字符串
empty_str = ""
?注意?:單引號和雙引號功能相同,選擇一種風格并保持一致。三重引號常用于文檔字符串(docstring)或多行文本。
2. 字符串的特性
- ?不可變性(Immutable)?:字符串一旦創建就不能被修改。任何“修改”操作實際上都會創建一個新的字符串對象。
- ?有序性(Ordered)?:字符串中的字符有固定的順序,可以通過索引訪問。
- ?可迭代(Iterable)?:可以使用
for循環遍歷字符串中的每個字符。
3. 字符串索引與切片
索引(Indexing)
text = "Python"
print(text[0]) # P (第一個字符)
print(text[-1]) # n (最后一個字符)
print(text[5]) # n
切片(Slicing)
語法:string[start:end:step]
text = "Hello World"
# 基本切片
print(text[0:5]) # Hello (索引0到4)
print(text[6:]) # World (從索引6到末尾)
print(text[:5]) # Hello (從開頭到索引4)
# 步長
print(text[::2]) # HloWrd (每隔一個字符)
print(text[::-1]) # dlroW olleH (反轉字符串)
# 負索引切片
print(text[-5:]) # World
4. 字符串的常用操作
拼接(Concatenation)
# 使用 + 操作符
greeting = "Hello" + " " + "World"
# 使用 join() 方法(推薦,效率更高)
words = ["Hello", "Beautiful", "World"]
sentence = " ".join(words) # "Hello Beautiful World"
重復
repeat = "Ha" * 3 # "HaHaHa"
長度
length = len("Python") # 6
5. 常用字符串方法
Python 提供了豐富的內置方法來操作字符串:
text = " Hello World "
# 大小寫轉換
print(text.upper()) # " HELLO WORLD "
print(text.lower()) # " hello world "
print(text.capitalize()) # " hello world " -> " hello world " (首字母大寫)
print(text.title()) # " Hello World "
# 去除空白
print(text.strip()) # "Hello World"
print(text.lstrip()) # "Hello World " (左)
print(text.rstrip()) # " Hello World" (右)
# 查找與替換
print(text.find("World")) # 8 (找到的索引,未找到返回-1)
print(text.replace("World", "Python")) # " Hello Python "
# 判斷方法
print("Hello".isalpha()) # True (是否全是字母)
print("123".isdigit()) # True (是否全是數字)
print("hello".startswith("he")) # True
print("world".endswith("ld")) # True
# 分割與合并
sentence = "apple,banana,orange"
fruits = sentence.split(",") # ['apple', 'banana', 'orange']
joined = "-".join(["a", "b", "c"]) # "a-b-c"
6. 字符串格式化
1. f-string(推薦,Python 3.6+)
name = "Alice"
age = 25
message = f"我的名字是 {name},今年 {age} 歲。"
print(message) # 我的名字是 Alice,今年 25 歲。
2. .format() 方法
message = "我的名字是 {},今年 {} 歲。".format(name, age)
message = "我的名字是 {n},今年 {a} 歲。".format(n=name, a=age)
3. % 格式化(較老的方式)
message = "我的名字是 %s,今年 %d 歲。" % (name, age)
7. 轉義字符
使用反斜杠 \ 來表示特殊字符:
| 轉義字符 | 含義 |
|---|---|
\\ |
反斜杠 |
\' |
單引號 |
\" |
雙引號 |
\n |
換行 |
\t |
制表符 |
\r |
回車 |
print("Hello\nWorld") # 換行
print("He said: \"Hello\"") # He said: "Hello"
print("C:\\Users\\Name") # 路徑
?原始字符串(Raw String)?:在字符串前加 r,忽略轉義字符。
path = r"C:\Users\Name\Documents" # 不需要雙寫反斜杠
8. 字符串的不可變性示例
text = "Hello"
# text[0] = "h" # ? 錯誤!字符串不可變
# 正確的做法是創建新字符串
new_text = "h" + text[1:] # "hello"
9. 實用技巧
遍歷字符串
for char in "Python":
print(char)
檢查子字符串
if "hello" in "hello world":
print("找到了!")
統計字符
text = "hello"
print(text.count("l")) # 2
Tuple(元組)
在 Python 中,元組(Tuple) 是一種有序、不可變的序列數據類型。它與列表(List)非常相似,但最大的區別在于?一旦創建,元組的內容不能被修改?。
1. 元組的創建
元組可以通過以下幾種方式創建:
# 使用圓括號 ()
t1 = (1, 2, 3, 4, 5)
t2 = ("apple", "banana", "cherry")
t3 = (1, "hello", 3.14, True)
# 單個元素的元組需要加逗號
single = (42,) # 注意逗號,否則會被當作普通括號
print(type(single)) # <class 'tuple'>
# 省略括號(但不推薦,可讀性差)
t4 = 1, 2, 3
print(type(t4)) # <class 'tuple'>
# 空元組
empty_tuple = ()
# 使用 tuple() 構造函數
t5 = tuple([1, 2, 3]) # 從列表創建
t6 = tuple("hello") # 從字符串創建 -> ('h', 'e', 'l', 'l', 'o')
2. 元組的特性
| 特性 | 說明 |
|---|---|
| 有序(Ordered) | 元素有固定的順序,可以通過索引訪問 |
| 不可變(Immutable) | 一旦創建,不能添加、刪除或修改元素 |
| 可重復(Allow Duplicates) | 可以包含重復的元素 |
| 可哈希(Hashable) | 如果元組中的所有元素都是不可變的,那么元組本身是可哈希的,可以用作字典的鍵或集合的元素 |
3. 元組的訪問
索引(Indexing)
t = (10, 20, 30, 40, 50)
print(t[0]) # 10
print(t[-1]) # 50 (最后一個)
切片(Slicing)
print(t[1:4]) # (20, 30, 40)
print(t[::2]) # (10, 30, 50)
print(t[::-1]) # (50, 40, 30, 20, 10) 反轉
4. 元組的操作
拼接(Concatenation)
t1 = (1, 2)
t2 = (3, 4)
t3 = t1 + t2 # (1, 2, 3, 4)
重復
t = (1, 2) * 3 # (1, 2, 1, 2, 1, 2)
成員檢查
if 2 in t:
print("2 在元組中")
長度
length = len(t) # 獲取元組長度
5. 元組的常用方法
由于元組不可變,它的方法很少:
t = (1, 2, 3, 2, 4, 2)
# count() - 統計某個元素出現的次數
print(t.count(2)) # 3
# index() - 查找元素第一次出現的索引
print(t.index(3)) # 2
# print(t.index(99)) # ValueError: tuple.index(x): x not in tuple
6. 元組的解包(Unpacking)
元組解包是 Python 中非常強大和常用的功能。
# 基本解包
coordinates = (3, 4)
x, y = coordinates
print(x, y) # 3 4
# 函數返回多個值
def get_name_age():
return "Alice", 25
name, age = get_name_age()
# 忽略某些值
data = (1, 2, 3, 4, 5)
a, b, *rest = data # a=1, b=2, rest=[3,4,5]
print(rest) # [3, 4, 5]
# 只取首尾
first, *middle, last = (1, 2, 3, 4, 5)
print(first, middle, last) # 1 [2, 3, 4] 5
7. 元組的應用場景
- 作為字典的鍵
# ? 元組可以作為字典的鍵
locations = {
(0, 0): "原點",
(3, 4): "點A",
(-1, 2): "點B"
}
- 函數返回多個值
def min_max(numbers):
return min(numbers), max(numbers)
minimum, maximum = min_max([1, 2, 3, 4, 5])
- 數據保護
# 防止意外修改
days_of_week = ("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
# days_of_week[0] = "Mon" # ? 會報錯,保護數據
- 格式化字符串
print("坐標: %d, %d" % (3, 4))
8. 注意事項
- ?不可變性是淺層的?:如果元組包含可變對象(如列表),那么該對象的內容仍然可以被修改。
t = (1, [2, 3], 4)
t[1].append(5) # ? 允許,因為修改的是列表
print(t) # (1, [2, 3, 5], 4)
# t[1] = [2, 3, 4] # ? 不允許,因為要替換元組元素
總結
本文主要對python的基本數據類型中的不可變數據類型進行相關的學習,下章節針對可變數據類型繼續相關的學習。希望大家一起努力學習,掌握基礎才能更深的靈活運用后期的人工智能的實踐工作。
資料關注
相關資料全部免費獲取:
歡迎關注公眾號:咚咚王

《Python編程:從入門到實踐》
《利用Python進行數據分析》
《算法導論中文第三版》
《概率論與數理統計(第四版) (盛驟) 》
《程序員的數學》
《線性代數應該這樣學第3版》
《微積分和數學分析引論》
《(西瓜書)周志華-機器學習》
《TensorFlow機器學習實戰指南》
《Sklearn與TensorFlow機器學習實用指南》
《模式識別(第四版)》
《深度學習 deep learning》伊恩·古德費洛著 花書
《Python深度學習第二版(中文版)【純文本】 (登封大數據 (Francois Choliet)) (Z-Library)》
《深入淺出神經網絡與深度學習+(邁克爾·尼爾森(Michael+Nielsen) 》
《自然語言處理綜論 第2版》
《Natural-Language-Processing-with-PyTorch》
《計算機視覺-算法與應用(中文版)》
《Learning OpenCV 4》
《AIGC:智能創作時代》杜雨+&+張孜銘
《AIGC原理與實踐:零基礎學大語言模型、擴散模型和多模態模型》
《從零構建大語言模型(中文版)》
《實戰AI大模型》
《AI 3.0》
posted on
浙公網安備 33010602011771號