歡迎光臨
每天分享高質量文章

手把手教你學Python:一文看懂字串基本操作

導讀:很多程式員處理文本而不是數字。文本包含字符:字母、數字、標點符號、空格等。字串是一系列字符。例如,字串”Hello”是一個包含5個字符的序列。

 

 

作者:凱·霍斯特曼(Cay Horstmann),蘭斯·尼塞斯(Rance Necaise)

如需轉載請聯繫大資料(ID:hzdashuju)

01 字串型別

你在輸出陳述句的介紹中已經見過字串了,例如

print("Hello"

字串可以儲存在變數中

greeting = "Hello"

然後就可以在需要的時候像數字值一樣來訪問:

print(greeting)

字串常量表示一個特定的字串(例如”Hello”),就像數字常量(例如2)表示一個特定的數字一樣。在Python中,字串常量由包含在一對單引號或雙引號中的字符序列來指定。

print("This is a string."'So is this.'

因為允許使用兩種界定符,Python可以很容易地在字串中包含撇號或者引號。

message = 'He said "Hello" ' 

們使用雙引號來包含字串,因為這在很多其他編程語言中是一個通用的約定。然而,在交互式Python解釋器環境中總是使用單引號來顯示字串。

字串中字符的數量稱作字串的長度。例如,”Harry”的長度是5。你可以使用Python內置函式len來計算一個字串的長度:

length = len("World!")   # 長度為6

長度為0的字串稱作空字串,它不包含字符,寫作:

 

""

或者

''

02 連接與重覆

給定兩個字串,例如”Harry”和”Morgan”,你可以把它們連接成一個字串,結果中包含兩個字串中的所有字符,其中第一個字串中的字符在前,第二個字串中的字符在後。在Python中,你可以使用+運算子連接兩個字串。例如:

firstName = "Harry" 
lastName = "Morgan" 
name = firstName + lastName

結果字串為

"HarryMorgan" 

如果你想在名和姓之間使用空格進行分隔該怎麼做?沒問題:

name = firstName + " " + lastName

這個陳述句連接了3個字串:firstName、字串常量” “和lastName。結果是

"Harry Morgan"

如果+運算子的左側或右側的運算式是字串,那麼另一側的運算式也必須是字串,否則會導致語法錯誤。你不能把字串和數字連接到一起。

 

你也可以通過對一個字串進行多次重覆來產生字串。例如,假設你需要打印一行破折線。不需要指定一個包含50個破折線的字串常量,你可以使用*運算子來創建一個包含50個”-“字符的字串。例如,

dashes = "-" * 50

結果是字串

"-------------------------------------------------"

任意長度的字串都可以使用*運算子進行重覆。例如,陳述句

message = "Echo..." 
print(message * 5

顯示

Echo...Echo...Echo...Echo...Echo...

與字串相乘的因子必須是整數值,並且可以出現在*運算子的任意一側,但是習慣上把字串放在左側而整數因子放在右側。

03 轉換數字和字串

有時候需要把數字轉換為字串。例如,假設你需要在字串尾部追加一個數字。你不能連接字串和數字:

name = "Agent " + 1729   # 錯誤:只能連接字串

因為字串連接只能在兩個字串之間進行,我們必須首先把數字轉換為字串。

為了生成數字值的字串表示,使用函式str。陳述句

str(1729)

把整數1729轉換為”1729″,函式str解決了我們的問題:

id = 1729 
name = "Agent " + str(id) 

函式str也可以用來把浮點數轉換為字串。

 

反過來,為了把包含數字的字串轉換為數字值,可以使用函式int或float:

id = int("1729") 
price = float("17.29"

當字串來自於用戶輸入時,這個轉換很重要。

傳遞給函式int或float的字串只能包含隱含型別的常量。例如,陳述句

value = float("17x29")

會產生運行時錯誤,因為字母”x”不是浮點數常量的一部分。

前面和後面的空白字符會被忽略:

 

int(" 1729 ")

 

仍然是1729。

04 字串與字符

字串是Unicode字符的序列。你可以使用字串和位置來訪問單個字符,這個位置稱作字符的索引

第1個字符的索引是0,第2個的索引是1,以此類推。

通過特殊的下標記號可以訪問單個字符,位置被放置在方括號中。例如,變數name定義如下:

name = "Harry" 

陳述句

first = name[0]
last = name[4]

從字串中提取了兩個不同的字符。第一個陳述句提取出字串的第一個字符”H”並存入變數first。第二個陳述句提取位置4上面的字符,也就是最後一個字符,然後存入變數last。

索引值必須位於字符位置的合法範圍,否則會在運行時丟擲下標越界異常。函式len可以用來確定最後一個索引,或者字串的最後一個字符。

pos = len(name) - 1   # "Harry"的長度是5 
last = name[pos]      # last被設置為"y" 

下麵的程式演示了上面概念的用法,程式使用字串初始化了兩個變數,一個使用你的名字,另一個使用你認為比較重要的人的,然後輸出首字母。

操作first[0]得到包含first第一個字母的字串,second[0]獲取第二個名字的首字母。最後,使用字串”&”連接兩個單字母的字串得到長度為3的字串initials(見圖2-4)。

▲圖2-4 創建首字母字串

## 
#  本程式用來輸出一對首字母


# 設置兩個名字
first = "Rodolfo" 
second = "Sally" 

# 計算和顯示首字母
initials = first[0] + "&" + second[0] 
print(initials)

字串運算示例見表2-7。

 

陳述句

結果

說明

string = “Py”

string = string + “thon”

string被設置位”Python”

當作用於字串時,+表示連接。

print(“Please” + ” enter your name: “)

打印

Please enter your name:

使用續行符打斷無法在一行內編寫的字串。

team = str(49) + “ers”

team被設置為”49ers”

因為49是一個整數,必須被轉換位字串。

greeting = “H & S”

n = len(greeting)

n被設置為5

在統計數量時每個空格都作為一個字符。

string = “Sally”

ch = string[1]

ch被設置為”a”

註意,第一個下標是0。

last =   string[len(string) – 1]

last被設置為包含string中最後一個字符的字串

最後一個字符的位置是len(string)   – 1。

表2-7 字串運算

 

05 字串方法

在計算機編程中,物件是表示具有特定行為的值的物體。值可以很簡單,像字串。也可以很複雜,像圖形視窗或資料檔案。現在,你需要掌握適用於字串物件的一小部分內容。

物件的行為通過方法來指定。方法和函式很類似,是執行特定任務的一系列程式指令。但是與函式不同的是,方法只能用於定義好的型別的物件,而函式則是獨立的操作。例如,你可以把upper方法應用於任何字串,就像

name = "John Smith" 
uppercaseName = name.upper()   # 把uppercaseName設置為"JOHN SMITH"

註意,方法名緊跟在物件之後,並且使用一個圓點(.)分隔物件和方法名。

另一個方法lower可以用來傳回一個字串的小寫版本:

print(name.lower())   # 輸出john smith 

至於什麼時候需要呼叫函式(例如len(name))和什麼時候呼叫方法(name.lower()),可能稍微有點武斷。你需要進行簡單的記憶,在打印版或者在線Python參考資料中進行查找。

像函式呼叫一樣,方法呼叫也可以有引數。例如,字串方法replace創建一個新字串,其中給定子字串的每次出現都被替換為第二個字串。下麵是該方法具有兩個引數的呼叫:

name2 = name.replace("John""Jane")   # 把name2設置為"Jane Smith"

註意任何方法的呼叫都不能修改字串的值。呼叫name.upper()之後,變數name的值仍然是”John Smith”,該方法的呼叫傳回大寫版本。類似地,replace方法傳回替換後的新字串,不會對原字串做任何修改。

以下列出本節中介紹的字串方法:

  • s.lower():字串s的小寫版本

  • s.upper():字串s的大寫版本

  • s.replace(old, new):傳回一個新字串,其中子字串old在s中的每次出現都被替換為字串new

 

關於作者: 凱·霍斯特曼(Cay Horstmann) ,聖何塞州立大學計算機科學系教授,Java的倡導者,經常在開發人員會議上發表演講。他是《Java核心技術》的作者,同時也關註Python、Scala、C++等語言,為專業程式員和計算機科學專業學生編寫過數十本圖書。 

蘭斯·尼塞斯(Rance Necaise) 蘭道爾夫-麥肯學院計算機科學系副教授,撰寫了《Data Structures and Algorithms Using Python》和《Python for Java Programmers》等技術書籍。

本文摘編自Python程式設計(原書第2版),經出版方授權發佈。

延伸閱讀《Python程式設計(原書第2版)

點擊上圖瞭解及購買

轉載請聯繫微信:DoctorData

推薦語:專為Python初學者打造的入門教材,講解清晰實用,案例豐富有趣。

赞(0)

分享創造快樂