知識點拆解
??
1. 切片技巧
定義
通過?[start:end:step]
?語法截取字符串的子序列
-
start:起始索引(包含,默認0)
-
end:結束索引(不包含,默認末尾)
-
step:步長(可為負數實現逆序)
字訣:包左不包右
核心用途
-
快速逆序字符串
-
提取特定區間的子串
-
間隔取字符
示例代碼
#輸入一個字符串s
s = "Hello,天梯賽!"# 基本切片
print(s[0:5]) # 輸出 "Hello" (索引0-4)
print(s[7:10]) # 輸出 "天梯賽"# 逆序技巧
print(s[::-1]) # 輸出 "!賽梯天,olleH"
print(s[5:2:-1]) # 輸出 ",ol" (從索引5到3逆序)# 步長應用
print(s[::2]) # 輸出 "Hlo天賽" (每隔1個字符取)
注意事項
-
索引越界時自動取有效范圍(如s[0:100]等效s[0:])
-
原字符串不可變,切片會生成新字符串
2. 格式化輸出
定義
使用?f-string
?或?format()
?方法控制字符串的顯示格式
常用格式符
格式符號 | 功能說明 | 示例 |
---|---|---|
:>n | 右對齊,總寬度n | f"{6:>4}" → "? ?6" |
:<n | 左對齊,總寬度n | f"{6:<4}" → "6? ?" |
:^n | 居中對齊,總寬度n | f"{6:^4}" → " 6? " |
:0>n | 右側補零到n位 | f"{6:0>4}" → "0006" |
:.2f | 保留兩位小數 | f"{3.1415:.2f}" → "3.14" |
:x | 十六進制格式 | f"{255:x?}" → "ff" |
print(f"{6:>4}")
print(f"{6:<4}")
print(f"{6:^4}")
print(f"{6:0>4}")
print(f"{6:0<4}")
print(f"{6:0^4}")
#答案輸出示例已在上面表格中給出
場景應用
-
按要求補前導零(如輸出時間格式)
-
對齊表格數據
-
控制浮點數精度
示例代碼
# 成績格式化輸出
name, score = "張三", 95.5
print(f"{name:<5}的成績:{score:0>5.1f}分")
# 輸出 "張三 的成績:095.5分"# 日期補零
month, day = 3, 8
print(f"日期:{month:0>2d}-{day:0>2d}")
# 輸出 "日期:03-08"
3. 正則表達式
定義
通過特定模式匹配文本的工具,Python中通過?re
?模塊實現。
re.findall()提取數字/字母 匹配模式 r'\d+'(整數) / r'-?\d+'(含負數)
常用元字符
模式 | 含義 | 示例 |
---|---|---|
\d | 匹配數字 | 等價于[0-9] |
\w | 匹配字母/數字/下劃線 | 等價于[a-zA-Z0-9_] |
\s | 匹配空白字符 | 包含空格、換行等 |
. | 匹配任意字符(除換行) | |
* | 匹配前字符0次或多次 | |
+ | 匹配前字符1次或多次 | |
? | 匹配前字符0或1次 |
典型應用場景
-
從復雜文本中提取數字/字母
-
驗證輸入格式(如郵箱、電話號碼)
-
替換特定模式的文本
示例代碼
import retext = "訂單號:AB123,金額:-45.6元,數量:2"# findall提取所有整數(含負數)
nums = re.findall(r"-?\d+", text)
print(nums) # 輸出 ['123', '-45', '6', '2']# 分割混合字符
parts = re.split(r"(\d+)", "A12B34C")
print(parts) # 輸出 ['A', '12', 'B', '34', 'C']# 替換非數字字符
clean_str = re.sub(r"[^\d]", "", "Tel: 0571-8888-6666")
print(clean_str) # 輸出 "057188886666"
?正則表達式在密碼強度評估器的設計中有反復使用過,他的公式套用相對比較晦澀,例如\d表示數字,+表示一個或多個,-?處理可能出現的負號等等,比較細碎可以學一個用一個,初學者以盡量知道在干什么為主。
4. 字符串轉換
核心方法
方法 | 功能說明 | 時間復雜度 |
---|---|---|
.split() | 按分隔符分割為列表 | O(n) |
.join() | 合并可迭代對象為字符串 | O(n) |
.replace() | 替換子串 | O(n) |
.upper() | 轉大寫 | O(n) |
.strip() | 去除首尾空白 | O(n) |
應用場景對比
場景 | 推薦方法 |
---|---|
按空格分割單詞 | s.split() (無參數自動處理) |
處理含多種分隔符 | re.split() |
合并路徑 | "/".join(path_parts) |
批量替換多個不同字符 | .translate() |
示例代碼
# 分割與合并
s = "2023-08-15"
parts = s.split("-") # ['2023', '08', '15']
new_s = "/".join(parts) # "2023/08/15"# 多重替換
s = "Hello World"
s = s.replace("H", "J").replace("W", "") # "Jello orld"# 快速清洗數據
dirty_str = " Price: $123.45\n"
clean_str = dirty_str.strip().replace("$", "").upper()
# 結果:"PRICE: 123.45"
綜合應用示例
題目:處理用戶輸入的復雜字符串,提取所有整數并求和
import reinput_str = "數據:A1銷售額5000元,B2銷量-300件,成本-1200.5"
numbers = list(map(int, re.findall(r"-?\d+", input_str)))
total = sum(numbers) # 5000 + (-300) + (-1200) = 3800
print(f"合計:{total}")
對應練習題
??L1-011 A-B(字符串刪除操作)?
? L1-026 I Love GPLT(固定格式輸出)?
? L1-034 點贊(統計特征字符)?