Python程序設計——字符串處理的特殊方法

學習目標:

  1. 學習如何創建字符串
  2. 使用len、min和max函數獲取一個字符串的長度、串中的最大和最小的字符
  3. 使用下標運算符([])訪問字符串中的元素
  4. 使用截取運算符str[ start:end]從較長的字符串中得到一個子串
  5. 使用+運算符連接兩個字符串,通過*運算符復制一個字符串
  6. 使用in和not in運算符判斷一個字符串是否包含在另一個字符串內
  7. 使用比較運算符(==、! =、<、<=、>、>=)對字符串進行比較
  8. 使用for循環迭代字符串中的字符
  9. 使用方法isalnum、isalpha、isdigit、isidentifier、islower、isupper 和isspace來測試字符串
  10. 使用方法endswith、startswith、find、rfind 和count搜索子串
  11. 使用方法capitalize、lower、upper、title、swapcase和replace 轉換字符串
  12. 使用方法lstrip、rstrip 和strip從一個字符串的左側或右側刪除空格
  13. 使用方法center、ljust、rjust 和format格式化字符串
  14. 在應用程序( CheckPalindrome、Hex ToDecimalConversion)的開發過程中應用字符串
  15. 為運算符定義特殊的方法
  16. 設計Rational類表示有理數

一、引言

????????關鍵點:本章將重點放在類的設計上,它使用Python中的str類為例并探索Python中特殊方法的作用。

????????前一篇介紹了關于類和對象的一些重要概念。我們已經學習了如何定義一個類,以及如何創建和使用對象。str 類不僅在表示字符串方面很有用,而且它也是一個很好的類設計的例子。本文我們將更深人地討論str類。在Python語言中特殊方法起著非常重要的作用。這里也會介紹一些特殊方法和運算符重載,以及使用特殊方法設計類。

二、str 類

關鍵點:一個str對象是不可變的;這也就是說,一旦創建了這個字符串,那么它的內容是不可變的。

2.1、創建字符串

你可以使用構造函數構建字符串,如下所示:

s1 = str() # Create an empty string object
s2 = str("Welcome") # Create a string object for We lcome

Python提供了一個簡單語法,它通過使用字符串值創建一一個字符串。例如:

s1 = " "# Same as s1= str()
s2 = "Welcome" # Same as s2 = str("Welcome")

????????一個字符串對象是不可變的: 一旦創建一個字符串對象出來,那么它的內容就不會再改變。為了優化性能,Python 使用一個對象來表示具有相同內容的字符串。如圖所示,s1和s2都指向同一個字符串對象,它們都有著相同的id數。

????????這個動作對Python庫中的所有不可變對象都是真的。例如: int 是一種不可變類。兩個具有相同值的int對象實際上是共享了相同的對象,如圖所示:

2.2、處理字符串的函數

????????Python的一些內置函數可以和字符串一起使用。你可以使用len函數來返回一個字符串中的字符個數,而max和min函數返回字符串中的最大和最小字符。下面是一些例子:

>>> S = "We1come"
>>> len(s)
7
>>> max(s)
'o'
>>> min(s)
'W'
>>>

????????因為字符串s有7個字符,len(s)返回7 。注意:小寫字母的ASCII碼值要高于小寫字母的ASCII碼值,所以,max(s) 返回o ,而min(s)返回W 。

2.3、下標運算符 [ ]

一個字符串是一個字符序列。可以使用下面的語法通過下標運算符訪問字符串中的一個字符:

s[index]

下標是基于0的;也就是說,它們的范圍從0到len(s)-1,如圖所示。

2.4、截取運算符 [start : end]

????????截取運算符通過使用語法s[start:end]返回字符串其中的一段。這一段就是從下標start到下標end-1的一個子串。例如:

>>> s = "Welcome"
>>> s[1 : 4]
elc

s[1:4]返回從下標1到下標3的子串。

????????起始下標或結束下標都可以被忽略。在這種情況下,默認的起始下標是0,而結束下標是最后一個下標。例如:

>>> S = "Welcome"
>>>s[ :6]
'Welcom'
>>> s[4: ]
'ome'
>>>s[1:-1]
elcom
>>>

????????在第2行中,s[ :6] 和s[0:6]是一樣的,都返回的是從下標0到下標5的子串。在第4行中,s[4: ]和s[4:7]是一樣的,都返回的是從下標4到下標6的子串。你也可以在截取字符串的過程中使用負下標。例如,在第6行中,s[1:-1]s[1:-1+len(s)]是一樣的

????????注意:如果截取操作s[i:j] 中的下標(i或j)是負數,那么就用len(s)+index來替換下標。如果j>len(s),那么j就會被設置成len(s)。如果i>=j,那么截取的子串就會成為空串。

2.5、連接運算符+和復制運算符*

????????你可以使用連接運算符+組合或連接兩個字符串。你也可以使用復制運算符*來連接相同的字符串多次。下面是一 些例子:

>>> s1 = "Welcome"
>>> s2 = "Python"
>>> s3 = s1 + "to" + s2
>>> s3
'Welcome to Python'
>>> s4 = 3 * s1
>>> s4
'WelcomeWelcomeWelcome'
>>> s5 = s1 * 3
>>>s5
'WelcomeWelcomeWelcome'
>>>

注意: 3*s1和s1*3具有相同的效果。

2.6、in和notin運算符

你可以使用in和not in操作來測試一個字符串 是否在另一個字符串中。下面是一些例子:

>>> s1 = "Welcome"?
>>> "come" in s1
True
>>> "come" not in s1
False
>>>

下面是另一個例子:

s = input("Enter a string: ")
if "Python" in s:print("Python","is in", s)
else:print("Python","is not in", s)

????????如果你在運行這個程序的時候將字符串“WelcometoPython”作為輸入,這個程序就應該顯示:
????????python is in Welcome to Python.

2.7、比較字符串

????????你可以使用比較運算符來對字符串進行比較(已經介紹過==、!=、 >、<. >=和<=)。Python是通過比較字符串中對應的字符進行比較的,比較是通過計算字符的數值代碼實現的。例如,a比A大,因為a的數值代碼比A的數值代碼大。

????????假設你需要比較字符串s1("Jane")和s2("Jake")。首先,比較s1和s2中的首字符(J和J)。因為它們是一樣的,所以比較它們的第二個字符(a和a)。因為它們也是一樣的,所以比較它們的第三個字符(n 和k)。因為n的ASCII碼值要大于k的,所以s1是大于s2的。

????????下面是一些例子:

>>>'green' == 'glow'
False
>>> "green" != "g1ow"
True
>>> "green" > "glow"
True
>>> "green" >= "glow"
True
>>> "green" < "g1ow"
False
>>> "green" <= "g1ow"
False
>>> "ab" <= "abc"
True
>>>

2.8、迭代字符串

????????一個字符串是可迭代的。這意味著你可以使用一個for循環來順序遍歷字符串中的所有字符。例如,下面的代碼顯示了字符串s中的所有字符:

for ch in s:print(ch)

你可以將這段代碼讀作“對于s中的每個字符ch,都打印ch”。

????????這個for循環沒有使用下標來訪問字符。但是,如果你想以不同順序遍歷字符,那么你仍然必須使用下標。例如,下面的代碼顯示了字符串奇數位置的字符:

for i in range(0, len(s), 2):print(s[i])

????????這段代碼使用變量i作為字符串s的下標。i的初始值是0,然后,在它達到或超過len(s)之前每次增加2。對于每個i值,都打印s[i]。

2.9、測試字符串

2.10、搜索字串

2.11、轉換字符串

?注意:如同之前所述,字符串是不可變的。str 類中沒有方法能改變字符串的內容,這些方法都是創建了新的字符串。

2.12、刪除字符串中的空格

????????你可以使用下圖中的方法從字符串的前端、末端或者兩端來刪除字符串中的空格。回
顧一下,字符' '、\t、\f、\r和\n都被稱作空白字符。

????????注意:刪除空白字符的方法只能去掉字符串前后兩端的空白字符,并不能刪除被非空白字符包圍的空白字符。

????????提示:在輸入字符串上應用strip()方法來確保刪除輸入的末尾任何不需要的字符,這是很好的經驗。

2.13、格式化字符串


?下面是使用center、ljust和rjust方法的一些例子:

>>> s = "Welcome"
>>> s1 = s.center(11)
>>>s1
'  Welcome  '
>>> s2 = s.ljust(11)
>>>>s2
'Welcome       '
>>> s3 = s.rjust(11)
>>;>>s3
'      Welcome '
>>>

????????在第2行,s.center(11)將字符串s放在占位11個字符的字符串中央。在第5行,s.ljust(11)將字符串s放在占位11個字符的字符串左端。在第8行,s.rjust(11) 將字符串s放在占位11個字符的字符串右端。

三、運算符重載和特殊方法

關鍵點: Python允許為運算符和函數定義特殊的方法來實現常用的操作。Python使用一種獨特方式來命名這些方法以辨別它們的關聯性。

????????在之前,我們已經學會了如何使用完成字符串操作的運算符。可以使用運算符+來結合兩個字符串,而運算符*可以結合同一字符串多次,關系運算符(==、!=.<.<=、>、>=)用來比較兩個字符串,而下標運算符[]用來訪問一個字符。例如:

s1 ="Washi ngton"
s2 = "Cali fornia"
print("The first character in s1 is",s1[0] )
print("s1+s2is",s1+s2)
print("s1 < s2?",s1 < s2 )

????????這些運算符實際。上都是在str類中定義的方法。為運算符定義方法被稱作運算符重載。運算符重載允許程序員使用內嵌的運算符為用戶定義方法。下表羅列出運算符和方法之間的映射關系。當你命名這些方法時,名字前后要加兩個下劃線以便于Python辨識它們的關聯性。例如:為了將運算符+作為方法來使用,你應當定義一個名為__ add__ 的方法。 注意:這些方法并不是私有的,因為它們除了兩個起始下劃線還有兩個結尾下劃線。回顧一下,類中的初始化程序被命名為__ init__ ,這是一個初始化對象的特殊方法。

例如,你可以使用如下方法改寫之前的代碼:

s1 = "Washington"
s2 = "California"
print("The first character in sl is", s1.__ getitem__(0) )
print("s1 + s2 is", s1.__add__ (s2))
print("s1 < s2?", s1.__lt_ __ (s2))

????????s1.__ getitem__ (0) 與s1[0]相同,sl.__ add__ (s2) 與s1+s2相同,而s1.__ lt__ (s2) 與s1<s2相同。現在,你可以看出重載運算符的優勢。重載運算符可以極大地簡化程序,讓程序更易讀、易維護。

????????Python支持in運算符,它可以用來判斷一個字符是否在另一個字符串中或者一個元素是否是一個容器中的成員。對應的方法被命名為__ contains__(self,e)。 你可以使用方法__contain__或使用 in運算符來判斷一個字符是否在一個字符串內,代碼如下所示。

1 s1 = "Washi ngton"
2 print("Is W in s1?", 'W' in s1 )
3 print("Is W in s1?", s1.__contains__('W') )

W in s1和s1.__ contains__('w')一樣。

如果一個類定義了__ len__ (self) 方法,那么Python允許你使用方便的語法將調用方法作為函數調用。例如:__ len__ 方法被定義在 str類中,該方法返回字符串的字符個數。你既可以使用__ len__ 方 法也可以使用len函數來獲取字符串中的字符個數,代碼如下所述:

1 s1 = "Washington"
2 print("The 1ength of s1 is", 1en(s1))
3 print("The 1ength of s1 is", s1.__1en__())

len(s1)和s1.__ len__ () 是相同的。

????????許多特殊的運算符都被定義為Python的內置類型,例如: int 和float。假設i是3而j是4。i.__add__ (j) 和i+j是相同的,而i.__sub__(j) 和i-j是相同的。

注意:你可以傳遞一個對象 去調用print(x)。 這等價于調用print(x.__ str__()) 或 print(str(x))。

????????注意:比較運算符(==、!=、<、<=、>和>=)也可以通過使用方法__ cmp__ (self,other)來實現。如果self<other,那么該方法返回負整數。如果self==other,那么該方法返回0。如果self>other, 那么該方法返回正整數。對于兩個對象a和b,如果__ It___ 可用的話,那么a<b就調用a.__ It__(b)。 如果不行的話就調用__cmp__ 方法 來決定順序。

四、總結

  • 字符串對象是不可變的,不可以改變它的內容。
  • 可以使用Python函數len、min和max來返回字符串的長度、最大元素和最小元素。
  • 可以使用下標運算符[]來指向字符串中的一個單獨的字符。
  • 可以使用連接運算符+來連接兩個字符串,使用復制運算符*來復制一個字符串多次,使用截取運算符[: ]來獲取子串,而使用運算符in和not in來判斷-一個字符是否在一個字符串中。
  • 使用比較運算符(==、!=、 <、<=、>和>=)比較兩個字符串。
  • 使用for循環迭代字符串中的所有字符。
  • 可以在字符串對象上使用像endswith、startswitch、 isalpha、 islower、 isupper、lower、 upper、 find 、count、replace和strip這樣的函數。
  • 可以為重載操作定義特殊方法。

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

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

相關文章

【Odroid C4】交叉編譯工具鏈安裝以及QT交叉編譯環境搭建

【Odroid C4】交叉編譯工具鏈安裝以及QT交叉編譯環境搭建 虛擬機環境&#xff0c;UBUNTU20.04 文章目錄 【Odroid C4】交叉編譯工具鏈安裝以及QT交叉編譯環境搭建一、Odroid C4交叉編譯工具鏈安裝二、QT下載及編譯安裝1.QT下載2.交叉編譯QT 配置QtCreator可以[參考](https://bl…

快速入門vue3新特性和新的狀態管理庫pinia

(創作不易&#xff0c;感謝有你&#xff0c;你的支持&#xff0c;就是我前行的最大動力&#xff0c;如果看完對你有幫助&#xff0c;請留下您的足跡&#xff09; 目錄 Vue3.3新特性 defineOptions defineModel pinia 介紹 與 Vuex 3.x/4.x 的比較 安裝 核心概念 定義…

前饋神經網絡多分類任務

pytorch深度學習的套路都差不多&#xff0c;多看多想多寫多測試&#xff0c;自然就會了。主要的技術還是在于背后的數學思想和數學邏輯。 廢話不多說&#xff0c;上代碼自己看。 import torch import numpy as np import torch.nn as nn import torchvision import torchvisi…

【騰訊云Cloud Studio實戰訓練營】使用Cloud Studio社區版快速構建React完成點餐H5頁面還原

陳老老老板&#x1f9b8; &#x1f468;?&#x1f4bb;本文專欄&#xff1a;生活&#xff08;主要講一下自己生活相關的內容&#xff09; &#x1f468;?&#x1f4bb;本文簡述&#xff1a;生活就像海洋,只有意志堅強的人,才能到達彼岸。 &#x1f468;?&#x1f4bb;上一篇…

成集云 | 用友U8采購請購單同步釘釘 | 解決方案

源系統成集云目標系統 方案介紹 用友U8是中國用友集團開發和推出的一款企業級管理軟件產品。具有豐富的功能模塊&#xff0c;包括財務管理、采購管理、銷售管理、庫存管理、生產管理、人力資源管理、客戶關系管理等&#xff0c;可根據企業的需求選擇相應的模塊進行集…

什么是原子交換?

安全地在各個區塊鏈網絡之間傳輸資產對于釋放被困流動性并吸引更多用戶進入這一領域至關重要&#xff0c;同時也保持 Web3 的信任最小化核心價值。原子交換是一種讓兩個人在不依賴于中介來促成交易的情況下&#xff0c;在不同的區塊鏈網絡之間交換通證資產的方式。這為 DeFi 用…

Linux硬鏈接和軟連接

1、硬鏈接 硬連接指通過索引節點來進行連接。在 Linux 的文件系統中&#xff0c;保存在磁盤分區中的文件不管是什么類型都給它分配一個編號&#xff0c;稱為索引節點號(Inode Index)。在 Linux 中&#xff0c;多個文件名指向同一索引節點是存在的。比如&#xff1a;A 是 B 的硬…

數據結構之隊列詳解(包含例題)

一、隊列的概念 隊列是一種特殊的線性表&#xff0c;特殊之處在于它只允許在表的前端&#xff08;front&#xff09;進行刪除操作&#xff0c;而在表的后端&#xff08;rear&#xff09;進行插入操作&#xff0c;和棧一樣&#xff0c;隊列是一種操作受限制的線性表。進行插入操…

【Windows 常用工具系列 5 -- Selenium IDE的使用方法 】

文章目錄 Selenium 介紹Selenium IDE 介紹 Selenium IDE安裝Chrome 瀏覽器安裝Selenium IDE使用 Selenium 介紹 Selenium是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中&#xff0c;就像真正的用戶在操作一樣。 Selenium家庭成員有三個&#xff0c;分別是S…

Ubuntu 20.04 與 ROS noetic安裝 gtsam 編譯 LIO-SAM 的適配版本

Ubuntu 20.04 基于 ROS noetic安裝 gtsam&#xff0c; 編譯 LIO-SAM 的適配版本 摘要安裝GTSAM(ros-noetic-gtsam版本)編譯LIO-SAM的適配版本 摘要 本文簡介在 Ubuntu 20.04 下以 ROS noetic 為基礎安裝 GTSAM 并成功編譯 LIO-SAM 的適配版本。 安裝GTSAM(ros-noetic-gtsam版…

騰訊云國際站代充-阿里云ECS怎么一鍵遷移到騰訊云cvm?

今天主要來介紹一下如何通過阿里云國際ECS控制臺一鍵遷移至騰訊云國際CVM。騰訊云國際站云服務器CVM提供全面廣泛的服務內容。無-需-綁-定PayPal&#xff0c;代-充-值騰訊云國際站、阿里云國際站、AWS亞馬遜云、GCP谷歌云&#xff0c;官方授權經銷商&#xff01;靠譜&#xff0…

視頻匯聚集中存儲EasyCVR平臺調用iframe地址視頻無法播放,該如何解決?

安防監控視頻匯聚平臺EasyCVR基于云邊端一體化架構&#xff0c;具有強大的數據接入、處理及分發能力&#xff0c;可提供視頻監控直播、云端錄像、視頻云存儲、視頻集中存儲、視頻存儲磁盤陣列、錄像檢索與回看、智能告警、平臺級聯、云臺控制、語音對講、AI算法中臺智能分析無縫…

【SpringBoot】中的ApplicationRunner接口 和 CommandLineRunner接口

1. ApplicationRunner接口 用法&#xff1a; 類型&#xff1a; 接口 方法&#xff1a; 只定義了一個run方法 使用場景&#xff1a; springBoot項目啟動時&#xff0c;若想在啟動之后直接執行某一段代碼&#xff0c;就可以用 ApplicationRunner這個接口&#xff0c;并實現接口…

vue3+elementUI-plus實現select下拉框的虛擬滾動

網上查了幾個方案&#xff0c;要不就是不兼容&#xff0c;要不就是不支持vue3, 最終找到一個合適的&#xff0c;并且已上線使用&#xff0c;需要修改一下樣式&#xff1a; 代碼如下&#xff1a; main.js里引用 import vue3-virtual-scroller/dist/vue3-virtual-scroller.css; …

xollam勒索病毒數據恢復|金蝶、用友、管家婆、OA、速達、ERP等軟件數據庫恢復

引言&#xff1a; 數字時代的繁榮與便捷&#xff0c;也孕育著各種網絡安全威脅。其中&#xff0c;.xollam勒索病毒以其毒害性和隱蔽性引發了廣泛關注。本文91數據恢復將為您深入解析.xollam勒索病毒的威脅&#xff0c;探討解密方法&#xff0c;同時分享預防.xollam勒索病毒的關…

Python入門教程23:math模塊的用法

**math是Python 的一個內置模塊&#xff0c;它提供了許多數學函數和常量&#xff0c;用于進行數學計算。**以下是一些常用的math模塊中的函數和常量&#xff1a; math.pi&#xff1a;圓周率π的近似值&#xff0c;約等于3.14159。 math.e&#xff1a;自然對數的底數e的近似值…

【Tomcat】(Tomcat 下載Tomcat 啟動Tomcat 簡單部署 基于Tomcat進行網站后端開發)

文章目錄 Tomcat下載Tomcat啟動Tomcat簡單部署 基于Tomcat進行網站后端開發 Tomcat Tomcat 是一個 HTTP 服務器.HTTP 協議就是 HTTP 客戶端和 HTTP 服務器之間的交互數據的格式. HTTP 服務器我們可以通過 Java Socket 來實現. 而 Tomcat 就是基于 Java 實現的一個開源免費,也是…

Python爬蟲:如何使用Python爬取網站數據

更新&#xff1a;2023-08-13 15:30 想要獲取網站的數據&#xff1f;使用Python爬蟲是一個絕佳的選擇。Python爬蟲是通過自動化程序來提取互聯網上的信息。本文章將會詳細介紹Python爬蟲的相關技術。 一、網絡協議和請求 在使用Python爬蟲之前&#xff0c;我們需要理解網絡協…

Synopsys EDA數字設計與仿真

搭建EDA環境 參考如下博文安裝Synopsys EDA開發工具 https://blog.csdn.net/tugouxp/article/details/132255002?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132255002%22%2C%22source%22%3A%22tugouxp%22%7D Synopsys ED…

【Git】本地搭建Gitee、Github環境

本地 &#xff08;Local&#xff09; 1、使用命令生成公鑰&#xff08;pub文件&#xff09; 1. $ ssh-keygen -t rsa -C "xxxxxxxemail.com" -f "github_id_rsa" 2. $ ssh-keygen -t rsa -C "xxxxxxxemail.com" -f "gitee_id_rsa" …