Python 學習筆記-第3講:字符串

在 Python 中,字符串 (String)屬於不可變數據類型。

  • 不可變數據(四個):Number(數字)、String(字符串)、Tuple(元組)、Sets(集合);
  • 可變數據(兩個):List(列表)、Dictionary(字典)。
在 Python 中,僅有字符串 (String) 數據類型,沒有 Java 中的 Char 字符類型,單字符在 Python 中也是作爲一個字符串使用。

1. 單引、雙引號都可以定義字符串

 三引號允許一個字符串跨多行    

‘......’ “......” '''......'''

>>> print('''"hello
world\r
end\t!!!"''')
"hello
world

end	!!!"
>>> 

2. 字符串格式化

字符串格式化符號: 最常用的是 %s、%d、%f,在輸出的字符串中插入格式化字符,然後使用後面的變量進行替換輸出。

    符   號描述
      %c 格式化字符及其ASCII碼
      %s 格式化字符串
      %d 格式化整數
      %u 格式化無符號整型
      %o 格式化無符號八進制數
      %x 格式化無符號十六進制數
      %X 格式化無符號十六進制數(大寫)
      %f 格式化浮點數字,可指定小數點後的精度
      %e 用科學計數法格式化浮點數
      %E 作用同%e,用科學計數法格式化浮點數
      %g %f和%e的簡寫
      %G %f 和 %E 的簡寫
      %p 用十六進制數格式化變量的地址

格式化操作符輔助指令:

符號功能
*定義寬度或者小數點精度
-用做左對齊
+在正數前面顯示加號( + )
<sp>在正數前面顯示空格
#在八進制數前面顯示零('0'),在十六進制前面顯示'0x'或者'0X'(取決於用的是'x'還是'X')
0顯示的數字前面填充'0'而不是默認的空格
%'%%'輸出一個單一的'%'
(var)映射變量(字典參數)
m.n.m 是顯示的最小總寬度,n 是小數點後的位數(如果可用的話)
% [格式語法] 類型碼 (a,s,f等)            
格式語法:
                -       左對齊
                +       右對齊
                0       補零
                寬度(十進制數字)
                寬度.精度(十進制數字)                #f,F
>>> '%10d'%123
'       123'
>>> '%+10d'%123
'      +123'
>>> '%010d'%123
'0000000123'
>>> '%10d%%'%123
'       123%'
>>> '%-10s'%'abc'
'abc       '
>>>
>>> '%010.2f'%3.1415926
'0000003.14'
>>> '%-10.2f'%3.1415926
'3.14      '
>>> '%+010.2f'%3.1415926
'+000003.14'
>>> '%+10.2f'%3.1415926
'     +3.14'


也可以使用字符串格式化函數  str.format()

字符串類型格式化採用format()方法,基本使用格式是:
     <模板字符串>.format(<逗號分隔的參數>)
調用format()方法後會返回一個新的字符串,參數從0 開始編號

>>> '{0}{1}{2}'.format('圓周率是 ',3.1415926,'...')
		       
'圓周率是 3.1415926...'
format()方法可以非常方便地連接不同類型的變量或內容,如果需要輸出大括號,採用{{表示{,}}表示}
>>> s='圓周率 {{{1}{2}}} 是{0}'
		       
>>> s.format('無理數',3.1415926,'...')
		       
'圓周率 {3.1415926...} 是無理數'
>>> 
 format()方法中<模板字符串>的槽除了包括參數序號,還可以包括格式控制信息。此時,槽的內部樣式如下:
     {<參數序號>: <格式控制標記>}
     其中,<格式控制標記>用來控制參數顯示時的格式,包括:<填充><對齊><寬度>,<.精度><類型>6 個字段,這些字段都是可選的,可以組合使用,逐一介紹如下。

<寬度>

指當前槽的設定輸出字符寬度,如果該槽對應的format()參數長度比<寬度>設定值大,則使用參數實際長度。如果該值的實際位數小於指定寬度,則位數將被默認以空格字符補充。

<對齊>

指參數在<寬度>內輸出時的對齊方式,分別使用<、>和^三個符號表示左對齊、右對齊和居中對齊。

<填充>

指<寬度>內除了參數外的字符采用什麼方式表示,默認採用空格,可以通過<填充>更換。

逗號(,)

<格式控制標記>中逗號(,)用於顯示數字的千位分隔符

<.精度>

表示兩個含義,由小數點(.)開頭。對於浮點數,精度表示小數部分輸出的有效位數。對於字符串,精度表示輸出的最大長度。

<類型>

表示輸出整數和浮點數類型的格式規則。對於整數類型,輸出格式包括6 種:

  • b: 輸出整數的二進制方式;
  • c: 輸出整數對應的 Unicode 字符;
  • d: 輸出整數的十進制方式;
  • o: 輸出整數的八進制方式;
  • x: 輸出整數的小寫十六進制方式;
  • X: 輸出整數的大寫十六進制方式;
>>> '{0:*^10}{1}'.format(s,'一切皆對象')
		       
'**Python**一切皆對象'
>>> '{:=<30,.2f}'.format(123456.789123)
		       
'123,456.79===================='
>>> '{:=>30,.2f}'.format(123456.789123)
		       
'====================123,456.79'
>>> '{:=^30,.2f}'.format(123456.789123)
		       
'==========123,456.79=========='
>>> '{0:#^10b},{0:@<10c},{0:*>10d},{0:10o},{0:^10x},{0:X}'.format(123)
		       
'#1111011##,{@@@@@@@@@,*******123,       173,    7b    ,7B'

print('%s.....%d'%(變量1, 變量2))
print('{0}.....{1}'.format(變量1, 變量2))
print('{name}.....{age}'.format(nami=變量1, age=變量2))

3. 字符串運算符

操作符描述實例
+字符串連接a + b 輸出結果: HelloPython
*重複輸出字符串a*2 輸出結果:HelloHello
[]通過索引獲取字符串中字符a[1] 輸出結果 e
[ : ]截取字符串中的一部分a[1:4] 輸出結果 ell
in成員運算符 - 如果字符串中包含給定的字符返回 True'H' in a 輸出結果 1
not in成員運算符 - 如果字符串中不包含給定的字符返回 True'M' not in a 輸出結果 1
r/R原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思來使用,沒有轉義特殊或不能打印的字符。 原始字符串除在字符串的第一個引號前加上字母 r(可以大小寫)以外,與普通字符串有着幾乎完全相同的語法。
print( r'\n' )
print( R'\n' )
%格式字符串 
>>> a='Python'
		       
>>> for i in range(len(a)):
	print('a[%d]:'%i,a[i])


a[0]: P
a[1]: y
a[2]: t
a[3]: h
a[4]: o
a[5]: n
>>> 
字符串切片
[起始索引:結束索引(取不到)]
[起始索引:結束索引(取不到):步長]
反序:[::-1]
>>> a='python'
		       
>>> a[2:4]
		       
'th'
>>> a[1:5:2]
		       
'yh'
>>> a[::-1]
		       
'nohtyp'
>>> 

4. 字符串內建函數

序號方法及描述
1

capitalize()
將字符串的第一個字符轉換爲大寫

2

center(width, fillchar)


返回一個指定的寬度 width 居中的字符串,fillchar 爲填充的字符,默認爲空格。
3

count(str, beg= 0,end=len(string))


返回 str 在 string 裏面出現的次數,如果 beg 或者 end 指定則返回指定範圍內 str 出現的次數
4

bytes.decode(encoding="utf-8", errors="strict")


Python3 中沒有 decode 方法,但我們可以使用 bytes 對象的 decode() 方法來解碼給定的 bytes 對象,這個 bytes 對象可以由 str.encode() 來編碼返回。
5

encode(encoding='UTF-8',errors='strict')


以 encoding 指定的編碼格式編碼字符串,如果出錯默認報一個ValueError 的異常,除非 errors 指定的是'ignore'或者'replace'
6

endswith(suffix, beg=0, end=len(string))
檢查字符串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的範圍內是否以 obj 結束,如果是,返回 True,否則返回 False.

7

expandtabs(tabsize=8)


把字符串 string 中的 tab 符號轉爲空格,tab 符號默認的空格數是 8 。
8

find(str, beg=0 end=len(string))


檢測 str 是否包含在字符串中,如果指定範圍 beg 和 end ,則檢查是否包含在指定範圍內,如果包含返回開始的索引值,否則返回-1
9

index(str, beg=0, end=len(string))


跟find()方法一樣,只不過如果str不在字符串中會報一個異常.
10

isalnum()


如果字符串至少有一個字符並且所有字符都是字母或數字則返 回 True,否則返回 False
11

isalpha()


如果字符串至少有一個字符並且所有字符都是字母則返回 True, 否則返回 False
12

isdigit()


如果字符串只包含數字則返回 True 否則返回 False..
13

islower()


如果字符串中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是小寫,則返回 True,否則返回 False
14

isnumeric()


如果字符串中只包含數字字符,則返回 True,否則返回 False
15

isspace()


如果字符串中只包含空白,則返回 True,否則返回 False.
16

istitle()


如果字符串是標題化的(見 title())則返回 True,否則返回 False
17

isupper()


如果字符串中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是大寫,則返回 True,否則返回 False
18

join(seq)


以指定字符串作爲分隔符,將 seq 中所有的元素(的字符串表示)合併爲一個新的字符串
19

len(string)


返回字符串長度
20

ljust(width[, fillchar])


返回一個原字符串左對齊,並使用 fillchar 填充至長度 width 的新字符串,fillchar 默認爲空格。
21

lower()


轉換字符串中所有大寫字符爲小寫.
22

lstrip()


截掉字符串左邊的空格或指定字符。
23

maketrans()


創建字符映射的轉換表,對於接受兩個參數的最簡單的調用方式,第一個參數是字符串,表示需要轉換的字符,第二個參數也是字符串表示轉換的目標。
24

max(str)


返回字符串 str 中最大的字母。
25

min(str)


返回字符串 str 中最小的字母。
26

replace(old, new [, max])


把 將字符串中的 str1 替換成 str2,如果 max 指定,則替換不超過 max 次。
27

rfind(str, beg=0,end=len(string))


類似於 find()函數,不過是從右邊開始查找.
28

rindex( str, beg=0, end=len(string))


類似於 index(),不過是從右邊開始.
29

rjust(width,[, fillchar])


返回一個原字符串右對齊,並使用fillchar(默認空格)填充至長度 width 的新字符串
30

rstrip()


刪除字符串字符串末尾的空格.
31

split(str="", num=string.count(str))


num=string.count(str)) 以 str 爲分隔符截取字符串,如果 num 有指定值,則僅截取 num 個子字符串
32

splitlines([keepends])


按照行('\r', '\r\n', \n')分隔,返回一個包含各行作爲元素的列表,如果參數 keepends 爲 False,不包含換行符,如果爲 True,則保留換行符。
33

startswith(str, beg=0,end=len(string))


檢查字符串是否是以 obj 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定範圍內檢查。
34

strip([chars])


在字符串上執行 lstrip()和 rstrip()
35

swapcase()


將字符串中大寫轉換爲小寫,小寫轉換爲大寫
36

title()


返回"標題化"的字符串,就是說所有單詞都是以大寫開始,其餘字母均爲小寫(見 istitle())
37

translate(table, deletechars="")


根據 str 給出的表(包含 256 個字符)轉換 string 的字符, 要過濾掉的字符放到 deletechars 參數中
38

upper()


轉換字符串中的小寫字母爲大寫
39

zfill (width)


返回長度爲 width 的字符串,原字符串右對齊,前面填充0
40

isdecimal()


檢查字符串是否只包含十進制字符,如果是返回 true,否則返回 false。

1. 去首尾空格及特殊字符

s.strip()    .lstrip()    .rstrip(',')

>>> s='  Python  '
		       
>>> s.lstrip()
		       
'Python  '
>>> s.rstrip()
		       
'  Python'
>>> s.strip()
		       
'Python'
>>> s.rstrip('。')
		       
'一切皆對象'
2. 將字符串中的大小寫轉換
S.lower() #小寫 
S.upper() #大寫 
S.swapcase() #大小寫互換 

S.capitalize() #首字母大寫 

s.title() # 標題樣式

s.istitle() # 判斷是否爲標題樣式

>>> s.capitalize()
		       
'Python and java'
>>> s.swapcase()
		       
'PYTHON AND java'
>>>
>>> s.istitle()
		       
False
>>> s.title()
		       
'Python And Java'
>>> 

3. 查找/替換

s.find(str)

s.rfind(str)

s.index(str)

s.rindex(str)

s.count(str)

s.replace(old,new,max) #返回替換後的新字符串,原字符串不可更改

>>> s='python and JAVA'
		       
>>> s.find('n')
		       
5
>>> s.rfind('n')
		       
8
>>> s.find('i')
		       
-1
>>> s.index('n')
		       
5
>>> s.rindex('n')
		       
8
>>> s.index('i')
		       
Traceback (most recent call last):
  File "<pyshell#108>", line 1, in <module>
    s.index('i')
ValueError: substring not found
>>> s='python and JAVA'
		       
>>> s.count('a')
		       
1
>>> s.count('A')
		       
2
>>> s.replace('JAVA','C++')
		       
'python and C++'
>>> s
		       
'python and JAVA'

4. 對齊

s.ljust()

s.rjust()

s.zfill()

>>> s='python and JAVA'
		       
>>> s.ljust(30,'=')
		       
'python and JAVA==============='
>>> s.rjust(30,'=')
		       
'===============python and JAVA'
>>> s.center(30,'=')
		       
'=======python and JAVA========'
>>> s.zfill(30)
		       
'000000000000000python and JAVA'

5. 字符類型判斷

S.startswith(prefix[,start[,end]]) #是否以prefix開頭 
S.endswith(suffix[,start[,end]]) #以suffix結尾 
S.isalnum() #是否全是字母和數字,並至少有一個字符 
S.isalpha() #是否全是字母,並至少有一個字符 
S.isdigit() #是否全是數字,並至少有一個字符 
S.isspace() #是否全是空白字符,並至少有一個字符 
S.islower() #S中的字母是否全是小寫 
S.isupper() #S中的字母是否便是大寫 
S.istitle() #S是否是首字母大寫的

6. 拆分/合併

S.split([sep, [maxsplit]]) #以sep爲分隔符,把S分成一個list。maxsplit表示分割的次數。默認的分割符爲空白字符 
S.rsplit([sep, [maxsplit]]) 
S.splitlines([keepends]) #把S按照行分割符分爲一個list,keepends是一個bool值,如果爲真每行後而會保留行分割符。 
S.join(seq) #把seq代表的序列──字符串序列,用S連接起來

s='python and JAVA'
		       
>>> s.split()
		       
['python', 'and', 'JAVA']
>>> s.split('and')
		       
['python ', ' JAVA']
>>> s='-'
		       
>>> s.join('python')
		       
'p-y-t-h-o-n'
>>> l=['python','java','C++']
		       
>>> s.join(l)
		       
'python-java-C++'
>>> ''.join(l)
		       
'pythonjavaC++'
>>> ' '.join(l)
		       
'python java C++'

7. 字符串長度

len(str) 

通常與 range() 配合使用,生成可遍歷的迭代對象

>>> s='python and JAVA'
		       
>>> len(s)
		       
15
>>> range(len(s))
		       
range(0, 15)




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