Python基礎:資料型別-字串(7)

libingql發表於2018-12-29

1.字串基本操作

  字串是由字元組成的一串字元序列,字串是有順序的,從左到右,索引從0開始,依次遞增。

  Python中字串型別:str。

  Python中字串的三種表示方式:

  (1)普通字串:採用單引號(')或雙引號(")括起來的字串。

  (2)原始字串(raw string):在普通字串的前面加 r,字串中的特殊字元不需要轉義。

  (3)長字串:字串中包含換行、縮排等排版字元,使用三重單引號(''')或三重雙引號(""")括起來的字串。

1.1 普通字串

  Python中字串採用Unicode編碼。

>>> s='Hello World!'
>>> s
'Hello World!'

  轉義字元:

轉義字元描述
\(在行尾時) 換行
\t 水平製表符
\n 換行
\r 回車
\" 雙引號
\' 單引號
>>> s='Hello\tWorld!'
>>> print(s)
Hello   World!

1.2 原始字串

  原始字串:在普通字串前面加 r。原始字串可以直接按照字串使用,沒有轉義符。

>>> s=r'Hello\tWorld!'
>>> print(s)
Hello\tWorld!

1.3 長字串

  長字串可以包含換行、縮排等排版字元。

>>> s='''Hello
...  World!'''
>>> print(s)
Hello
 World!

2.字串格式化

  Python提供3種字串格式化方法:

  (1)%運算子

  (2)內建函式format()

  (3)建立字串物件配合format(),使用{}進行替換

2.1 %運算子 — 格式字串

  語法:

%[flag][width][.precision]

  其中,%:標記轉換說明符開始

     flag:轉換標記

     width:最小寬度,轉換後的值所保留的最小字元個數。如果是*,則寬度從值元組中讀取。

     precision:精度,如果轉換的實數,精度表示出現在小數點後的位數;如果轉換的是字串,則表示最大寬度。如果是*,則精度從值元組中讀取。

  寬度和精度都是整數,通過點號(.)分隔。兩個都是可選引數,如果給出精度,則必須包含點號。

  轉換型別:

符號描述符號描述
%c 格式化字元及其ASCII碼 %s 格式化字串
%d 格式化整型 %u 格式化無符號整型
%o 格式化無符號八進位制數 %x,%X 格式化無符號十六進位制
%f 格式化浮點數字,可指定精度值 %e,%E 用科學計數法格式化浮點數
%g,%G %f和%e的簡寫,十進位制整數或浮點數。 %% 輸出資料時顯式百分號
%r 使用repr()函式輸出    

  轉換標誌(flag):

符號描述符號描述
'#' 十六、八進位制進行轉換時,可在前方補0。 '0' 數值前補0
'-' 靠左對齊,若與0同時使用,會優先於0。 '' 保留一個空格
> 靠右對齊 < 靠左對齊
+ 在轉換值前加正負號    
>>> '%c'%97 # ASCII碼輸出字元
'a'
>>> '年同比變化:%.2f%%'%120.987 # 輸出百分號
'年同比變化:120.99%'
>>> '%o'%10 # 轉換八進位制數
'12'
>>> '%#o'%10 # 轉換補0八進位制數
'0o12'
>>> '%x'%127 # 轉換十六進位制數
'7f'
>>> '%#x'%127 # 轉換補0十六進位制數
'0x7f'
>>> from math import pi
>>> '%010.5f'%pi # pi轉換:帶5位小數、長度為10、位數不足0填充的字串
'0003.14159'
>>> s = '%-10.5f'%pi # 左對齊
>>> s
'3.14159   '
>>> len(s)
10
>>> s = '%-010.5f'%pi # -優先於0
>>> s
'3.14159   '
>>> '%10.5f'%pi # 空格填充
'   3.14159'
>>> '%-+10.5f'%pi # 左對齊顯示正負符號
'+3.14159  '
>>> '%+-10.5f'%pi # 左對齊顯示正負符號
'+3.14159  '
>>> '%-+10.5f'%-pi # 左對齊顯示正負符號
'-3.14159  '
>>> '%3.5f'%pi #最小寬度 < 實際寬度,顯示實際寬度
'3.14159'
>>> '%.5s'%('Hello World') # 字串精度值:最大寬度
'Hello'
>>> s = '%10.5s'%('Hello World') # 字串擷取最大寬度後空格填充
>>> s
'     Hello'
>>> len(s)
10
>>> '%.*s'%(5,'Hello World') # 精度從元組中讀取
'Hello'
>>> '%*.*s'%(10,5,'Hello World') # 寬度、精度從元組中讀取
'     Hello'

2.2 內建函式format()

 

>>> '{:,}'.format(10000) # 千分位
'10,000'

 

3.字串方法

3.1 find()方法

  find()方法:用於檢測字串中是否包含子字串sub。如果指定start(開始)和end(結束),則在指定範圍內檢測。

        如果包含子字串,返回開始的索引;否則返回-1。

  find()語法:

str.find(sub[, start[, end]])

  其中,sub:指定檢測的子字串,

     start:開始索引,預設為0;

     end:結束索引,預設為字串的長度。

  返回結果為子字串所在位置的最左端索引,如果沒有找到,則返回-1。

  help檢視find()方法定義:

>>> help(str.find)
Help on method_descriptor:

find(...)
    S.find(sub[, start[, end]]) -> int
    
    Return the lowest index in S where substring sub is found,
    such that sub is contained within S[start:end].  Optional
    arguments start and end are interpreted as in slice notation.
    
    Return -1 on failure.

  rfind()方法:與find()方法類似,區別是找到返回最右端位置的索引。

>>> help(str.rfind)
Help on method_descriptor:

rfind(...)
    S.rfind(sub[, start[, end]]) -> int
    
    Return the highest index in S where substring sub is found,
    such that sub is contained within S[start:end].  Optional
    arguments start and end are interpreted as in slice notation.
    
    Return -1 on failure.
>>> field = 'Hello World'
>>> field.find('o')
4
>>> field.rfind('o')
7
>>> field.find('o',5) # 指定開始索引    
7
>>> field.find('a') # 未找到則返回-1        
-1
>>> words = 'Where there is a will,there is a way.'
>>> len(words)
37
>>> words.find('is')
12
>>> words.rfind('is')
28

3.2 join()方法

  join()方法:用於將序列中的元素以指定字元連線成一個新的字串。

  join()語法:

str.join(seq)

  其中,str:指定字元

     seq:待連線的元素序列

     返回結果:指定字元連線序列中元素後生成的新字串

>>> dirs = ['','usr','bin','python3']
>>> mark = '/'
>>> mark.join(dirs)
'/usr/bin/python3'

4.字串與數字相互轉換

4.1 字串轉換數字

  int()或float():字串轉換數字,如果轉換成功,則返回數字;否則引發異常。

>>> int('9')
9
>>> int('9.6')
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    int('9.6')
ValueError: invalid literal for int() with base 10: '9.6'
>>> float('9.6')
9.6

  預設情況下int()函式都將字串引數作為十進位制數字進行轉換,可以指定基數(進位制)。

>>> int('a')
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    int('a')
ValueError: invalid literal for int() with base 10: 'a'
>>> int('a',16)
10
>>> int('ab',16)
171
>>> int('h',16)
Traceback (most recent call last):
  File "<pyshell#15>", line 1, in <module>
    int('h',16)
ValueError: invalid literal for int() with base 16: 'h'

4.2 數字轉換字串

  數字轉換字串有很多方法,另外Python中字串提供str()函式。

>>> str(9.6)
'9.6'
>>> str(True)
'True'
>>> str([1,2,3])
'[1, 2, 3]'

  str()函式所有型別都可以轉換,但缺點是不能格式化。如果格式化字串可以使用format()函式。

>>> from math import pi
>>> '{:.2f}'.format(pi)
'3.14'

相關文章