Python基礎之字符串操作全解析

在 Python 中,字符串是最常用的數據類型之一,掌握字符串的各種操作對于日常編程至關重要。本文將詳細介紹 Python 字符串的類型特性、編碼轉換、常用運算符及方法,幫助你全面掌握字符串處理技巧。

一、字符串的基本類型

Python 中的字符串屬于?str?類型,以字符為單位進行處理;而經過編碼后的字符串則屬于?bytes?類型,以字節為單位處理。

# 查看字符串類型?
a = "hello world"?
print(type(a))  # <class 'str'>

二、字符串的編碼與解碼

字符串的編碼(encode())和解碼(decode())是處理文本數據的重要操作,尤其在網絡傳輸和文件讀寫時經常用到。

1. 編碼(str → bytes)

將字符串轉換為字節序列,默認使用 UTF-8 編碼,也可指定其他編碼方式。

a = "hello world"
a1 = a.encode()  # 默認UTF-8編碼
print(type(a1))  # <class 'bytes'># 指定編碼方式為UTF-8
a3 = "字符串"
a4 = a3.encode("utf-8")
print(a4, type(a4))  # b'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2' <class 'bytes'>

2. 解碼(bytes → str)

將字節序列轉換回字符串,需與編碼時使用的方式一致。

a = 'hello world'
a1 = a.encode('utf-8')
print(type(a1))  # <class 'bytes'>a2 = a1.decode('utf-8')
print(type(a2)) #<class 'str'>

三、字符串常用運算符

1. 拼接(+)

將兩個字符串合并為一個。

a = "字符串"
b = "拼接"
print(a + b)  # 字符串拼接

2. 重復輸出(*)

重復指定次數的字符串。

b = "字符串"
print(b * 4)  # 字符串字符串字符串字符串

3. 成員檢查(in /not in)

判斷子串是否存在于字符串中。

c = "字符串哈哈哈"
print("哈" in c)      # True(存在)
print("ha" not in c)  # True(不存在)
print("字符" not in c) # False(存在)

4. 下標訪問([])

通過下標獲取單個字符,從左向右從 0 開始,從右向左從 -1 開始

d = "字符串哈哈哈"
print(d[5])   # 哈(正向索引:第6個字符)
print(d[-4])  # 串(反向索引:從右數第4個字符)

5. 切片([:])

截取字符串的一部分,遵循 **“包前不包后”** 原則(包含起始下標,不包含結束下標),支持指定步長。

e = "包前不包后原則"
# 基礎切片
print(e[0:2])    # 包前(截取0-1下標)
print(e[1:])     # 前不包后原則(從1下標到結尾)
print(e[:5])     # 包前不包后(從開頭到4下標)# 反向切片
print(e[-4:])    # 包后原則(從-4下標到結尾)# 步長控制(步長正負決定方向)
print(e[-3:-1:1]) # 后原(步長1,正向截取-3到-2)
print(e[-2::-1])  # 原后包不前包(步長-1,反向截取從-2到開頭)

四、字符串常用方法

1. 查找子串位置

  • find(sub):返回子串首次出現的下標,不存在則返回 -1。
  • index(sub):功能與?find?相同,但子串不存在時會報錯。
a = "abcdefg"
print(a.find("cd"))    # 2(子串"cd"從下標2開始)
print(a.find("bhd"))   # -1(子串不存在)
print(a.find("cde", 2)) # 2(從下標2開始查找)

2. 統計子串出現次數(count (sub))

返回子串在字符串中出現的次數,支持指定查找范圍。

a = "abcdefgabc"
print(a.count("abc"))     # 2(全局查找)
print(a.count("abc", 4))  # 1(從下標4開始查找)

3. 判斷前綴 / 后綴(startswith /endswith)

檢查字符串是否以指定子串開頭或結尾,支持指定范圍。

a = "abcdefgabc"
print(a.startswith("ab"))        # True(以"ab"開頭)
print(a.endswith("g"))           # False(不以"g"結尾)
print(a.startswith("ab", 3, 5))  # False(在3-5下標范圍內不匹配)

4. 大小寫轉換

  • capitalize():首字母大寫,其余小寫。
  • lower()?/?upper():全小寫 / 全大寫。
  • title():每個單詞首字母大寫。
st = 'hello,python'
print(st.capitalize())  # Hello,python
print(st.upper())       # HELLO,PYTHON
print(st.title())       # Hello,Python

5. 替換子串(replace (old, new, count))

替換指定子串,count?可選(指定替換次數,默認全部替換)。

a = "old people old boy"
print(a.replace("old", "young"))    # young people young boy(全部替換)
print(a.replace("old", "young", 1)) # young people old boy(替換1次)

6. 分割字符串(split (sep, maxsplit))

按指定分隔符分割字符串,返回列表,maxsplit?可選(指定最大分割次數)。

st = 'hello,python'
print(st.split(','))    # ['hello', 'python'](按逗號分割)
print(st.split('o', 1)) # ['hell', ',python'](按'o'分割1次)

7. 移除空白 / 指定字符(strip 系列)

  • lstrip():移除左側空白 / 指定字符。
  • rstrip():移除右側空白 / 指定字符。
  • strip():移除兩側空白 / 指定字符。
st = '\t\nhello,python\t\n'
print(st.strip())  # hello,python(移除兩側空白)st = '!!hello,python!!!'
print(st.strip('!'))  # hello,python(移除兩側'!')

8. 居中、左對齊、右對齊

  • center(width, fillchar):將字符串居中,并用指定字符填充至指定寬度,默認填充空格。
  • ljust(width, fillchar):左對齊,用指定字符填充至指定寬度。
  • rjust(width, fillchar):右對齊,用指定字符填充至指定寬度。
s = "hello"
print(s.center(10, "*"))  # **hello***
print(s.ljust(10, "-"))   # hello-----
print(s.rjust(10, "="))   # =====hello

9. 判斷字符串特性

  • isalpha():判斷字符串是否只包含字母,且非空。
  • isdigit():判斷字符串是否只包含數字,且非空。
  • isalnum():判斷字符串是否只包含字母和數字,且非空。
  • isspace():判斷字符串是否只包含空白字符,且非空。
print("abc".isalpha())   # True
print("123".isdigit())   # True
print("abc123".isalnum())# True
print("   \t\n".isspace())# True

10. 拼接列表為字符串

join(iterable):將可迭代對象中的元素以指定字符串為分隔符拼接成新字符串。

lst = ["hello", "python", "world"]
print("-".join(lst))  # hello-python-world
print("".join(lst))   # hellopythonworld

五、字符串格式化

1. % 格式化

通過?%?占位符格式化字符串,支持多種數據類型。

占位符說明
%c格式化字符及 ASCII 碼
%s格式化字符串
%d格式化整數
%o格式化八進制數
%x/%X格式化十六進制數(小寫 / 大寫)
%f格式化浮點數
%e/%E科學計數法格式化浮點數
name = "Alice"
age = 25
pi = 3.1415926
print("hello, %s!" % name)          # hello, Alice!
print("年齡: %d" % age)             # 年齡: 25
print("兩位小數: %.2f" % pi)        # 兩位小數: 3.14
print("十六進制: %x" % 255)         # 十六進制: ff

2. f-string(Python 3.6+)

更簡潔的格式化方式,支持直接嵌入變量和表達式。

name = "Alice"
subject = {'name': 'Alice', 'age': 25}
print(f'hello, {name}!')  # hello, Alice!
print(f'my friend is {subject["name"]}, age {subject["age"]}')  # my friend is Alice, age 25
print(f'1+1={1+1}')       # 1+1=2(支持表達式)

3. 三引號(多行字符串)

保留字符串的換行和縮進,適合定義多行文本。

para_str = """這是一個多行字符串的實例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用換行符 [ \n ]。
"""
print(para_str)這是一個多行字符串的實例
多行字符串可以使用制表符
TAB ( 	 )。
也可以使用換行符 [ ]。

六、字符串的不可變性

Python 中的字符串是不可變的,即創建后不能修改其內容。當對字符串進行修改操作(如拼接、替換等)時,實際上是創建了一個新的字符串對象。

s = "hello"
s[0] = "H"  # 報錯:'str' object does not support item assignment# 看似修改,實則創建新對象
s_new = s.replace("h", "H")
print(s,id(s))    #hello 1539940498544   
print(s_new,id(s_new)) #Hello 1539940498672

七、原始字符串

在字符串前加?r?或?R,表示原始字符串,字符串中的轉義字符不會被處理,適用于路徑表示等場景。

print("C:\\Users\\test")  # C:\Users\test
print(r"C:\Users\test")   # C:\Users\test(原始字符串,轉義符不生效)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89914.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【爬蟲】逆向爬蟲初體驗之爬取音樂

尋找數據 打開F12中的網絡頁面&#xff0c;播放音樂后&#xff0c;篩選媒體&#xff0c;會發現當前這首歌曲音頻鏈接地址&#xff0c;打開后&#xff0c;點擊“標頭”就能能看到請求URL 截取“.mp3”前面的一部分進行搜索&#xff0c;搜索出來了很多數據包&#xff0c;但都是…

CppCon 2018 學習:Fancy Pointers for Fun and Profit

“Fancy Pointers for Fun and Profit” 這個標題聽起來像是在討論**“高級指針用法”**&#xff0c;尤其是在C里&#xff0c;如何利用智能指針、定制指針類型&#xff0c;或者其他高級指針技巧來寫更安全、更高效、更優雅的代碼。 可能的理解和內容方向&#xff1a; 1. 什么是…

思辨場域丨數字信號技術重塑農林牧漁:從“靠天吃飯”到“靠數吃飯”

凌晨三點&#xff0c;山東萊蕪的養豬戶老李被手機震動驚醒。屏幕顯示&#xff1a;3號豬舍&#xff0c;母豬即將分娩。他輕點屏幕啟動遠程監控&#xff0c;翻身繼續入睡——而在幾年前&#xff0c;這樣的夜晚他只能在豬圈里守著。 清晨的茶園里&#xff0c;興業縣的茶農王大姐掏…

文心大模型及百度大模型內容安全平臺齊獲信通院大模型安全認證

近日&#xff0c;文心大模型與百度大模型內容安全平臺——紅線大模型雙雙榮獲中國信息通信研究院泰爾認證中心頒發的“大規模預訓練模型&#xff08;文本生成功能&#xff09;安全認證證書”&#xff0c;且二者的認證級別皆“增強級”的最高級別。 大規模預訓練模型&#xff08…

香港服務器查詢緩存禁用-性能優化關鍵技術解析

在香港服務器運維過程中&#xff0c;查詢緩存禁用是提升數據庫性能的關鍵操作。本文將深入解析禁用查詢緩存的原理、操作步驟、適用場景及注意事項&#xff0c;幫助管理員優化MySQL服務器配置&#xff0c;解決高并發環境下的性能瓶頸問題。香港服務器查詢緩存禁用-性能優化關鍵…

深度學習圖像分類數據集—七種動物識別分類

該數據集為圖像分類數據集&#xff0c;適用于ResNet、VGG等卷積神經網絡&#xff0c;SENet、CBAM等注意力機制相關算法&#xff0c;Vision Transformer等Transformer相關算法。 數據集信息介紹&#xff1a;七種動物識別分類&#xff1a;[Chinese_Merganser, panda, Sika_Deer, …

ubuntu22桌面版中文輸入法 fcitx5

不要去 ubuntu software 下載 fcitx5 快捷鍵用不了 直接 sudo apt install fcitx5 \ fcitx5-chinese-addons \ fcitx5-frontend-gtk4 fcitx5-frontend-gtk3 fcitx5-frontend-gtk2 \ fcitx5-frontend-qt5不要在fcitx5里面設置快捷鍵&#xff0c;有些應用可能無法生效 在設置里全…

推客系統小程序終極指南:從0到1構建自動裂變增長引擎,實現業績10倍增長!

&#x1f4cc; 前言&#xff1a;為什么傳統營銷越來越難做&#xff1f;在流量紅利消失的今天&#xff0c;企業普遍面臨三大增長困境&#xff1a;獲客成本飆升&#xff1a;電商、教育等行業單客成本突破500元&#xff0c;ROI持續走低用戶粘性差&#xff1a;90%的活動用戶只參與一…

【數據結構】排序算法:歸并與堆

歸并排序&#xff1a;分治策略的經典實現 算法原理 歸并排序采用分治法策略&#xff0c;包含三個關鍵步驟&#xff1a; 分解&#xff1a;遞歸地將數組分成兩半 解決&#xff1a;對子數組進行排序 合并&#xff1a;將兩個有序子數組合并為一個有序數組 C語言實現 #includ…

機器學習-CatBoost

參考書籍&#xff1a;《機器學習-公式推導和代碼實現》 官方文檔提供的原生接口代碼參考書籍的P187&#xff5e;P188 簡介 全稱是Categorical Boosting&#xff0c;由俄羅斯搜索引擎巨頭Yandex于2017年提出。突出的優勢是在于可以高效地處理數據中的類別特征 ML中對類別特征…

MPLS 多協議標簽交換

前言&#xff1a; 多協議標簽交換MPLS&#xff08;Multiprotocol Label Switching&#xff09;是一種IP&#xff08;Internet Protocol&#xff09;骨干網技術。MPLS在無連接的IP網絡上引入面向連接的標簽交換概念&#xff0c;將第三層路由技術和第二層交換技術相結合&#xf…

CTF Web PHP弱類型比較與布爾值判斷

題目源碼與注釋 <?php show_source("index.php"); // 顯示自身源碼&#xff0c;方便分析 include("flag.php"); // 包含flag變量 $a $_GET[a]; // 獲取GET參數a&#xff0c;抑制報錯// 關鍵判斷 if($a 0 and $a){echo $flag; …

AntV G6動態連線

完整代碼如下 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>AntV G6 動態連線</titl…

puppeteerSharp html轉pdf

部屬到linux 上報錯&#xff1a; Failed to launch browser! /wwwroots/xxx/Chrome/Linux-138.0.7204.92/chrome-linux64/chrome: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory 問題服務包缺少依賴&…

springBoot接口層時間參數JSON序列化問題,兼容處理

背景&#xff1a;解決前端傳入時間參數格式不固定場景&#xff0c;避免接收參數報錯時間格式不能序列化。一、概述在 Java 后端開發中&#xff0c;處理 JSON 數據時&#xff0c;經常需要對日期時間字段進行反序列化。Java 中常用的日期時間類型是 java.time.LocalDateTime&…

List、Set、Map三者之間的關系

1、數據結構與核心特性接口數據結構順序性唯一性鍵值對null 元素List動態數組/鏈表有序&#xff08;插入順序&#xff09;允許重復否允許多個 nullSet哈希表 / 紅黑樹無序&#xff08;HashSet&#xff09;有序&#xff08;LinkedHashSet/TreeSet&#xff09;不允許重復否僅 Has…

進程控制----進程終止

一、進程終止的核心場景正常終止&#xff08;代碼完整運行完畢&#xff09;成功&#xff1a;進程執行到main函數結束或調用exit()&#xff0c;返回退出碼 0&#xff08;約定為執行成功&#xff09;。失敗&#xff1a;代碼執行完畢但結果異常&#xff0c;返回非零退出碼&#xf…

Milvus docker-compose 部署

文章目錄 前言Milvus docker-compose 部署1. 下載2. 修改配置3. 啟動4. 測試 前言 如果您覺得有用的話&#xff0c;記得給博主點個贊&#xff0c;評論&#xff0c;收藏一鍵三連啊&#xff0c;寫作不易啊^ _ ^。 ??而且聽說點贊的人每天的運氣都不會太差&#xff0c;實在白嫖的…

EveryThing搜索具體路徑下文件中的內容

1.打開EveryThing 2.點擊搜索&#xff0c;選擇高級搜索 3.選擇需要搜索的文件的路徑以及文件中需要包含的內容 4.之后就可以搜索到對應的目標文件

【算法】寬度優先遍歷BFS

二叉樹的寬搜 429、N叉樹的層序遍歷 題解 BFS核心思想 二叉樹的寬搜一般都是借助隊列來實現的&#xff0c;實現的原理為首先將根節點進行放入隊列中&#xff0c;然后將根節點進行彈出的時候&#xff0c;將這個節點的孩子節點進行放入隊列中&#xff0c;然后繼續彈出隊頭的元…