Python3學習筆記 | 四、Python的類型與運算-字元串(上)

  • 2019 年 10 月 6 日
  • 筆記

一、字元串簡介

在Python里字元串是一個有序的字元的集合,用來存儲和表現基於文本的資訊。字元串可以用來表示能夠像文本那樣編輯的任何資訊:符號和詞語、在入道記憶體中的文本的內容、Internet網址和Python程式等。

在Python里字元串被劃分為不可變序列這一類別,這意味著這些字元串所包含的字元存在從左至右的位置順序,並且他們不可以在遠處修改。字元串在Python里屬於一個序列類型的對象類別,在後面介紹的列表,元組都是序列類型。在這章對文本的操作,很多都能應用於序列類型的對象類別。

二、字元串常量

在Python里有很多種方法來表示字元串: • 單引號:』Text」1」『 • 雙引號:」Text』1』」 • 三引號:』』』…Lines…』』』,」」」…Lines…」」」. • 轉義字元:」Line1tadded tabnLine2」

• Raw字元串:r」C:MynewDirectoryfile.exe」 • Python 3.x中的Byte字元串:b』Tex01xt』 • Python 2.x中的Unicode字元串:u』myu0020text』

在Python 3.x里默認是使用Unicode方式存儲字元串,在Python 2.x里默認是使用Latin-1方式存儲字元串,因此不能直接識別中文。

# -*- encoding=utf8 -*-

在Python2.x腳本文件加上上面一句話就能正常使用中文。

1、轉義

跟其他開發語言相通,Python也有轉義字元:(反斜杠)

當我們在一個字元串里需要同時使用單引號(『)和雙引號(「)的時候,根據我們所使用的表示字元串的引號類型進行轉義。

>>>'a"b'c'

在這裡,我們要輸入的字元串為a」b』c。

因為我們使用單引號來表示字元串的開始和結尾,所以b後面的單引號需要轉義。當我們使用雙引號來表示字元串,我們需要在雙引號前面使用反斜杠進行轉義:

>>>s = "a"b'c"

除了這兩個,我們還有很多反斜杠加上單個字元來進行轉義的。

newline:忽視新行(連續)#newline就是按鍵盤上的enter(或return)

:反斜杠,因為反斜杠本身就是轉義字元,所以兩個反斜杠才能表示一個。

』 :單引號

」:雙引號

a:響鈴

b:倒退(一位)

f:換頁(下一頁,同一列。特定終端下可用。)

n:新行(換行)

r :返回(返回到開始)

t :水平製表符

v :垂直製表符

uhhhh:Unicode 16位的十六進位值

Uhhhhhhhh:Unicode 32位的十六進位值

xhh:十六進位值

ooo:八進位值

:Null(不是字元串結尾)

other:不轉義

轉義測試:

>>> print('abc')  a b c  >>> print('tteexttaannddEND')  t       eex            an  ddEND  >>> print('u0043')  C  >>> print('U00000043')  C

2、raw印製轉義

在Python里我們有的時候是需要印製轉義的。比如,當有個Windows的目錄如下:

>>> print('C:newfilefiles')  C:  ewfileiles

這個時候,要是按正常來說,n和f都會被轉移,但我們寫雙斜杠又麻煩,這個時候可以使用raw字元串來印製轉義。

>>> print(r'C:newfilefiles')  C:newfilefiles

這個時候其值會跟寫的完全一樣,當然,我們也可以寫成如下:

>>> print('C:\newfile\files')  C:newfilefiles

但是還是沒有使用印製轉義方便,特別是在路徑很長的時候。

三、字元串操作

1、len()

在Python里有很多函數,可以對字元串進行操作:len()是看字元串長度的。

>>> print(len('小小哆啦'))  4

當我們使用unicode的時候,按中文字元的個數顯示,但使用python2.x里的默認 字元編碼,就會是三倍的數值。

因為Python3開始,默認字元編碼是unicode,所以在Python3.x里是沒有問題的。

2、合併字元串

字元串合併,重複等,跟數字的操作類似:

>>> 'Dora'+'Emon'  'DoraEmon'  >>> 'Dora'*7  'DoraDoraDoraDoraDoraDoraDora'

這裡的第二個操作可以為我們節省很多字元輸入,比如我們需要輸入如下:

>>> print('-----……-----')     #80個「-」  -----……-----

這個可以使用如下方法簡單實現:

>>> print('-'*80)  -----……-----

當需要字元合併的時候,如下方法也可以,但不建議使用。

>>> 'Dora''Emon'  'DoraEmon'  >>> 'Dora' 'Emon'  'DoraEmon'

3、順序提取字元

當我們需要對每個字元串進行操作的時候,可以如下進行操作:

>>> for DaXiong in 'DoraEmon':  ...     print(DaXiong,end=' ')  ...  D o r a E m o n

這個意思是,我們從a字元串(序列)里按順序提取字元,進行操作。關於循環,後面在函數章節講解。

4、判斷存在字元

我們需要知道某個字元是否在一個字元串的時候,可以使用in或者not in來判斷:

>>> 'D' in 'DoraEmon'  True  >>> 'D'not in 'DoraEmon'  False  >>> 'X' in 'DoraEmon'  False

5、字元串分片

我們也可以對字元串分片,比如對DoraEmon,我們只需要第一個字元,第三個字元,或者中間兩個字元,後兩個字元等等。

>>> Dora='DoraEmon'  >>> Dora[1],Dora[5],Dora[-3]  ('o', 'm', 'm')  >>> Dora[1:5]  'oraE'  >>> Dora[-5:-1]  'aEmo'  >>> Dora[3:]  'aEmon'  >>> Dora[:-5]  'Dor'  >>> Dora[:]  'DoraEmon'

看一下在Python里對字元串的分段是如何進行的,例如:text=「ThisIsTestText」

提取單個字母時,需使用字母前的數字。比如:h,就是1或者-13,提取範圍時是開始字母的前面的數字到最後字母的後面數字。比如h到x,就是[1,13]或者[-13,13]或者[1,-1]或者[-13,-1],從開始到某個字母就可以[:3];從某個字幕到結尾就是[3:]。

分片操作還可以有第三個參數,間隔。我們要第一個字母開始,每隔一個字母顯示,結果應該是「DrEo」

>>> Dora='DoraEmon'  >>> Dora[::2]  'DrEo'

或者從第二個字母開始:

>>> Dora[1::2]  'oamn'

或者我們要倒過來:

>>> Dora[::-1]  'nomEaroD'  >>> Dora[-1:1:-1]  'nomEar'

6、字元串轉換

當我們需要對字元串大小寫等操作的時候,需要對字元串轉換成相應的程式碼。這個時候我們就需要兩個函數:ord和chr,ord是把一個字元轉換成數字,chr是把數字轉換成單個字元。

>>> ord('D')  68  >>> chr(68)  'D'  >>> ord('小')  23567  >>> chr(23567)  '小'

註:在Python3.x里可以直接使用中文字元,但是在Python2.x就不能直接用了。

用這兩個函數,可以對字元串轉換進行簡單的大小寫操作了,比如:把一個字元串里的內容全轉換成大些:

>>> DORA=''  #初始化DORA  >>> Dora='DoraEmon'  #設置Dora  >>> for DaXiong in Dora:  #循環,按順序提取Dora字元串內容  ...     DaXiong_code=ord(DaXiong)  #字元轉換成ascII碼  ...     if 97<=DaXiong_code and DaXiong_code <=122:  #當值大於等於97(a的值)或小於等於122(z的值)  ...         DORA+=chr(DaXiong_code-32)  #在值的基礎上減32(大小寫之間的差距)  ...     else:...         DORA+=DaXiong  #其餘情況不變  ...  >>> DORA  'DORAEMON'

7、字元串序列

在Python里字元串算是序列,但是字元串是不可修改的對象,所以如下操作不能正常被執行:

>>> Dora='DoraEmon'  >>> Dora[3]='DaXiong'  Traceback (most recent call last):   File "<stdin>", line 1, in <module>  TypeError: 'str' object does not support item assignment

但是我們可以重新給原來的變數賦值:

>>> Dora='DaXiong'+Dora[3:]  >>> Dora  'DaXiongEmon'