day03-python字串
1. 字串簡介
Python字串—一個有序的字元集合,用於儲存和展現基於文字的資訊。
從功能的角度來看,字串可以用來表示能夠像文字那樣編輯的任何資訊:符號和詞語,載入到記憶體中的文字檔案的內容、Internet網址和Python程式等。他們可以用來儲存位元組的絕對二進位制值,以及在國際化程式中用到的Unicode。
嚴格來說,Python的字串實際上是一個不可變的序列,意思是字串是不能修改的,和列表以及元祖一樣。
2. 字串常量
其實Python中的字串使用的多了的話感覺還是很方便的,只要理解了它的各種編寫方式和代表的含義。例如主要是如下幾種:
- 單引號:‘span”fff’
- 雙引號:“span’fff”
- 三引號:’’’…span…’’’
- 轉義字元:”s\tm\na\0om”
- Raw字串:r’ D:\blog\Python’
- Byte字串:b’sp\x01jn’
3. 單雙引號字串
在Python字串中,單引號和雙引號的作用是一樣的,返回相同型別的物件
4.索引和切片
字串是字元的有序集合,所以可以通過位置獲取相應的元素。而在Python中,字串中的字元是通過字元提取的。
和其他的語言一樣,Python的偏移量是從0開始的,比字串的長度小1。但是Python還支援使用負偏移量獲取元素,是從結束的地方反向計數。
4.1 索引(s[i])獲取特定偏移的元素
第一個元素的偏移量為0,s[1]獲取的是第2個元素。負偏移意味著從末尾開始計數,s[-i]獲取的是倒數第i個元素。
s = 'abcdefg' print('結果是:',s[1],s[0],s[-1]) #結果是: b a g
4.2 分片(s[i:j])提取特定的一部分作為序列
上邊界(j)並不包含在內,如s[1:4]獲取的是從偏移量1開始,但不包括偏移量4的元素。
s = 'abcdefg' print('結果是:',s[1:4]) #結果是: bcd
s[1:]獲取的是從1開始到末尾結束之間的元素。
s = 'abcdefg' print('結果是:',s[1:]) #結果是: bcdefg
s[:4]獲取從0開始但不包括4的元素。
s = 'abcdefg' print('結果是:',s[0:4]) #結果是: abcd
s[:-1]從0開始但不包括最後一位的元素。
s = 'abcdefg' print('結果是:',s[:-1]) #結果是: abcdef
s[:]獲取整個序列,實現頂層拷貝(有相同值,但是是不同的物件)。
s = 'abcdefg' print('結果是:',s[:]) #結果是: abcdefg
4.3 分片拓展
在Python2.3以後,分片表示式增加了可選的第三個索引,用作步進。而完整的分片表示式為s[i:j:k],意思是從偏移量i到j-1,每隔k個元素索引一個元素。
s = 'abcdefg' print(s[1:7:2]) #bdf print('反轉s字串:',s[::-1]) #反轉s字串: gfedcba
5. 字串轉換工具
1. int()函式將字串轉化為數字。
print('將字串轉化為數字:',int('213'),type(int('213'))) #將字串轉化為數字: 213 <class 'int'>
2. str()函式將數字轉化為字串。
print('將數字轉化為字串:',str(213),type(str(213))) #將數字轉化為字串: 213 <class 'str'>
3. float()函式將字串轉化為浮點數。
print('將字串轉化為浮點數:',float('213'),type(float('213'))) #將字串轉化為浮點數: 213.0 <class 'float'>
4. ord()函式將單個字串轉化為對應的ACIⅡ碼(是單個字元)。
print('將單個字串轉化為對應的ACIⅡ碼:',ord('c')) #將單個字串轉化為對應的ACIⅡ碼: 99
5. chr()函式將ACIⅡ碼轉化為對應的字元。
print('將ACIⅡ碼轉化為對應的字元:',chr(88)) #將ACIⅡ碼轉化為對應的字元: X
6. 修改字串
前面說過字串其實是一個不可變的序列,而不可變的意思就是不能在原地修改一個字串,如下:
s = 'span' s[0] = 'e' 彈出錯誤資訊:TypeError: 'str' object does not support item assignment
如果要修改一個字串,必須要使用合併、分片以及replace()方法來賦值給一個新的字串。
s = 'span' print('合併:',s + 'lol') #合併: spanlol print('分片:',s[:3] + 'lol' + s[:]) #分片: spalolspan print('repalce()方法:',s.replace('pa','lol')) #repalce()方法: sloln
7.字串格式化
7.1 在%操作符的左側放置一個一個需要格式化的字串,字串中帶有一個或者多個需要轉換的目標。在%操作符的右側放置一個元祖物件,會一一對應到相應的位置上去。
a = 'my name is %s,I am %d age' % ('Tom',16) print(a) #my name is Tom,I am 16 age
7.2 字串的格式化同時也允許左邊的轉換目標引用右邊字典中的鍵來提取相應的值。
a = 'my name is %(name)s,I am %(age)d age' % {'name':'Tom','age':16} print(a) #my name is Tom,I am 16 age
7.3 format方法
a = 'my name is {},I am {} age'.format('Tom',16) print(a) #my name is Tom,I am 16 age a = 'my name is {0},I am {1} age'.format('Tom',16) print(a) #my name is Tom,I am 16 age a = 'my name is {name},I am {age} age'.format(name='Tom',age=16) print(a) #my name is Tom,I am 16 age a = 'my name is {name},I am {age} age'.format_map({'name':'Tom','age':16}) print(a) #my name is Tom,I am 16 age
8.字串方法
msg = 'spanDelter' print('首字母大寫:',msg.capitalize()) # 首字母大寫: Spandelter print('大寫變小寫:',msg.casefold()) # 大寫變小寫(單個字元): spandelter print('center:',msg.center(40,'*')) # center: ***************spanDelter*************** print('字元e字串中出現的次數:',msg.count('e')) # 字元e字串中出現的次數: 2 print('將字串編碼成bytes格式:',msg.encode(encoding='utf-8')) # 將字串編碼成bytes格式: b'spanDelter' print('判斷字串是否以ter結尾:',msg.endswith('ter')) # 判斷字串是否以ter結尾: True print('查詢字元,找到返回第一個索引,找不到返回-1:',msg.find('w'),msg.find('p')) # 查詢字元,找到返回第一個索引,找不到返回-1: -1 1,rfind()方法是查詢字元最後出現的位置 print('是否是阿拉伯數字:','d'.isalnum()) # 是否是阿拉伯數字: True。 print('是否是純英文字元:',msg.isalpha()) # 是否是純英文字元: True print('是否為10進位制:',msg.isdecimal()) # 是否為10進位制: False print('是否為整數:',msg.isdigit()) # 是否為整數: False print('判斷是否為合法的變數名:',msg.isidentifier()) # 判斷是否為合法的變數名: True print('首字母是否大寫:',msg.istitle()) # 首字母是否大寫: False print('判斷是否為空格:',' '.isspace()) # 判斷是否為空格: True print('判斷是否可列印:',msg.isprintable()) # 判斷是否可列印: True print('判斷是否都為大寫:',msg.isupper()) # 判斷是否都為大寫: False print('判斷是否都為小寫:',msg.islower()) # 判斷是否都為小寫: False print('將序列(列表)變成字串:',','.join(['wl','lhc','wtx','wjy']),type(','.join(['wl','lhc','wtx','wjy']))) #將序列(列表)變成字串: wl,lhc,wtx,wjy <class 'str'> print('將序列(元祖)變成字串:','.'.join(('wl','lhc','wtx','wjy')),type(','.join(('wl','lhc','wtx','wjy')))) #將序列(元祖)變成字串: wl.lhc.wtx.wjy <class 'str'> print('將字串轉化為小寫:',msg.lower()) # 將字串轉化為小寫: spandelter #print('啥意思不知道:',msg.maketrans()) print('根據指定的分隔符將字串進行分割:',"www.runoob.com".partition('.')) # 根據指定的分隔符將字串進行分割: ('www', '.', 'runoob.com') print('將字串msg中的字元s替換為字元w:',msg.replace('s','w')) # 將字串msg中的字元s替換為字元w: wpanDelter print('將字串轉化為列表:',msg.split()) # 將字串轉化為列表: ['spanDelter'] print('去除兩邊空格:',msg.strip()) # 去除兩邊空格: spanDelter(作用非常大) print('大小寫互換:',msg.swapcase()) # 大小寫互換: SPANdELTER print('首字母大寫:',msg.title()) # 首字母大寫: Spandelter print('小寫變成大寫:',msg.upper()) # 小寫變成大寫: SPANDELTER print('長度30,前面不夠的用0補齊:',msg.zfill(30)) # 長度30,前面不夠的用0補齊: 00000000000000000000spanDelter