Python編程思想(4):字符串類型

  《Python編程思想》總目錄

目錄

1. 字符串和轉義符

2. 字符串內建函數

3. 字符串高級操作

4. 保持字符串的原汁原味

5. 長字符串


字符串的意思就是“一串字符”,也可以看做是字符的序列。比如“Helo, Mike”是一個字符串,“How are you?”也是一個字符串。Python要求字符串必須使用引號括起來,不過Python與大多數編程語言不同,在Python中,既允許使用單引號(‘)表示字符串,也允許使用雙引號(")表示字符串。但單引號和雙引號必須成對出現。

1. 字符串和轉義符

字符串的內容幾乎可以包含任何字符,例如,英文字符、數字、漢字等。

PS:Python3.x對中文字符支持較好,但 Python2.x則要求在源程序中增加“#coding:utf-8”才能支持中文字符。

下面的程序是字符串的基本用法:

str1 = 'hello world'           # 使用單引號表示字符串
str2 = "Python從菜鳥到高手"     # 使用雙引號表示字符串
print(str1)
print(str2)

但需要說明的是,Python並沒有我們想象的那麼聰明,如果字符串內容本身包含了單引號或雙引號,就可能需要進行特殊處理。這裏說的可能是指如果用雙引號表示字符串,那麼字符串中可以包含單引號,但不能直接包含雙引號,如果用單引號表示字符串,那麼字符串中可以有雙引號,但不能直接包含單引號。那麼如果非要包含單引號和雙引號該怎麼辦呢?這就需要用到本節要講的轉義符。

先看第一種處理方式。假如字符串內容中包含了單引號,則可以使用雙引號將字符串括起來。

例如,下面的代碼是錯誤的。

str3=’I'm a coder'

由於上面字符串中包含了單引號,此時 Python會將字符串中的單引號與字符串中第1個單引號配對,這樣就會把'I'當成字符串,而後面的 m a coder'就變成了多餘的內容,從而導致語法錯誤。

爲了避免這種問題,可以將上面代碼改爲如下形式:

str3 = "I'm a coder"

上面代碼使用雙引號將字符串括起來,此時 Python就會把字符串中的單引號當成字符串內容,而不是和字符串開始的引號配對。假如字符串內容本身包含雙引號,則可使用單引號將字符串括起來,例如如下代碼:

str4 = '"The weather is so hot today, it is already sweating!", said Mike'

接下來看第2種處理方式:轉義符。 Python允許使用反斜線(/)將字符串中的特殊字符進行轉義。假如字符串既包含單引號,又包含雙引號,此時必須使用轉義字符,例子代碼如下:

str5 = '"The weather is so hot today, it\'s already sweating!", said Mike'

2. 字符串內建函數

Python 爲字符串提供了40多個內建函數,在這一節只介紹其中幾個常用的方法,其他的方法在使用上大同小異。

str1 = " Hello world! 你好"
str2 = "world"

#返回字符串的長度:len(str)
print('str1的長度:',len(str1))

#對字符串進行分割:split(str),分割符爲str,此處以空格進行分割
print('str1以空格分割的結果:',str1.split(' '))

#刪除字符串首尾的空格
print('str1刪除首尾空格:',str1.strip())

#返回 str2 在 str1 裏面出現的次數,如果 begin 或者 end 指定則返回指定範圍內 str2出現的次數
print('str2在str1中出現的次數:',str1.count(str2))
print('str2在str1中出現的次數(指定範圍):',str1.count(str2,10,22))

#檢查字符串是否以 obj 結束,如果begin 或者 end 指定則檢查指定的範圍內是否以 obj 結束
#如果是,返回 True,否則返回 False.
print('str1是否以 str2結尾:',str1.endswith(str2))
print('str1是否以 str2結尾(指定範圍):',str1.endswith(str2,10,19))

#檢測 str2是否包含在字符串str1中,如果指定範圍 begin 和 end ,則檢查是否包含在指定範圍內,
#如果包含返回開始的索引值,否則返回-1
print('str1中是否包含str2:',str1.find(str2))
print('str1中是否包含str2(指定範圍):',str1.find(str2,6,22))

運行結果如下圖所示:

     3. 字符串高級操作

本節介紹一些與字符串相關的高級操作

(3) 反轉字符串

所謂反轉字符串,就是將字符串按字符順序倒序排列,例如,python編程nohtyp。這裏提供了2種方法用於字符串反轉。

方法1: 使用join和reversed函數

s = "python"
for c in reversed(s):
    print(c, end=" ")
print()
rs = ''.join(reversed(s))
print(rs)

輸出結果如下圖所示:

其中reversed函數返回字符串s的一個逆序可迭代的對象(每一個對象元素是一個字符)。然後再用join函數將這些字符連接起來,中間的分隔符是空串(長度爲0的字符串),所以就會輸出逆序字符串了。

#方法2

print(s[::-1])

這種方法利用了切片技術,如果step是-1,就會逆序輸出

(2)字符串切片操作

字符串的分片就是截取字符串。截取字符串需要指定開始截取的位置(begin)、截取結束的位置(end)、步長(step)。分片操作與引用數組元素類似,使用一對中括號。只是在中括號中要指定begin、end和step中間用冒號(:)分隔。下面是一個字符串分片的例子。

s1 = "hello world"
#  在字符串中使用索引
print(s1[0])            # 獲取s1的第1個字符,運行結果:h
print(s1[2])            # 獲取s1的第3個字符,運行結果:l
#  在字符串中使用分片
print(s1[6:9])                 # 獲取s1從第7個字符往後的3個字符,運行結果:wor
print(s1[6:])           # 獲取s1從第7個字符後的所有字符,運行結果:world
print(s1[::2])          # 在s1中每隔一個取一個字符,運行結果:hlowrd

輸出結果如下圖所示:

 

4. 保持字符串的原汁原味

本文前面講過轉義符(\)的應用,其實轉義符不光能輸出單引號和雙引號,還能控制字符串的格式,例如,使用“\n”表示換行,如果在字符串中含有“\n”,那麼“\n”後的所有字符都會被移到下一行。

print('Hello\nWorld')

輸出如下結果:

Hello

World

如果要混合輸出數字和字符串,並且換行,可以先用str函數將數字轉換爲字符串,然後在需要換行的地方加上“\n”。

print(str(1234) + "\n" + str(4321))

輸出結果如下:

1234

4321

 不過有的時候,我們不希望Python解析器轉義特殊字符,希望按原始字符串輸出,這時需要使用repr函數。

print(repr("Hello\nWorld"))

輸出結果如下:

'Hello\nWorld'

使用repr函數輸出的字符串,會使用一對單引號括起來。

其實如果只想輸出“\n”或其他類似的轉義符,也可以使用兩個反斜槓輸出“\”,這樣“\”後面的n就會被認爲是普通的字符了。

print("Hello\\nWorld")

輸出結果如下:

Hello\nWorld

除了前面介紹的repr和轉義符外,在字符串前面加“r”也可以原樣輸出字符串。

print(r"Hello\nWorld")

輸出結果如下:

Hello\nWorld

現在總結一下,如果讓一個字符串按原始內容輸出(不進行轉義),有如下3種方法。

  • repr函數
  • 轉義符(\)
  • 在字符串前面加“r”

下面的例子完整地演示了str和repr函數的用法。

# 輸出帶“\n"的字符串,運行結果:<hello
#                         world>
print("<hello\nworld>")
# 用str函數將1234轉換爲數字,運行結果:1234
print(str(1234))
# 拋出異常,len函數不能直接獲取數字的長度
#print(len(1234))
#  將1234轉換爲字符串後,獲取字符串長度,運行結果:4
print(len(str(1234)))
#  運行結果:<hello
#         world>
print(str("<hello\nworld>"))
#  運行結果:13
print(len(str("<hello\nworld>")))
#  運行結果:'<hello\nworld>'
print(repr("<hello\nworld>"))
#  運行結果:16
print(len(repr("<hello\nworld>")))
#  使用轉義符輸出“\”,輸出的字符串不會用單引號括起來,運行結果:hello\nworld
print("<hello\\nworld>")
#  運行結果:14
print(len("<hello\\nworld>"))
#  在字符串前面加“r”,保持字符串原始格式輸出,運行結果:hello\nworld
print(r"<hello\nworld>")
#  運行結果:14
print(len(r"<hello\nworld>"))

運行結果如下圖所示:

5. 長字符串

使用3個單引號或雙引號括起來的文本會成爲多行註釋,其實如果將這樣的字符串使用print函數輸出,或賦給一個變量,就會成爲一個長字符串。在長字符串中會保留原始的格式。

print("""Hello             # 長字符串,會按原始格式輸出          World""");

如果使用長字符串表示一個字符串,中間可以混合使用雙引號和單引號,而不需要加轉義符。

print("""Hell"o"           #  長字符串,中間混合使用雙引號和單引號          W'o'rld"""

對於普通字符串來說,同樣可以用多行來表示。只需要在每一行後面加轉義符(\),這樣以來,換行符本身就“轉義”了,會被自動忽略,所以最後都會變成一行字符串。

print("Hello\n         # 輸出一行字符串      World")

下面的例子完整地演示了長字符串的用法。

print('''I                     # 使用3個單引號定義長字符串
       'love'
          "Python"
          '''
    )
   
s = """Hello                   #  使用雙引號定義長字符串
    World
       世界
    你好
"""
 
print(s)                       #  輸出長字符串
 
print("Hello\                  #  每行字符串在回車符之前用轉義符,就可以將字符串寫成多行
   World")

程序運行結果如下圖所示:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章