Python 中字串的用法
在 Python 中,字串屬於不可變物件,不支援原地修改,如果需要修改其中的值,
智慧建立新的字串物件。但是,經常我們確實需要原地修改字串,可以使用 io.StringIO 物件
# 首先匯入模組 import io # 定義一個變數 s = "hello,world" sio = io.StringIO(s) print(sio) # <_io.StringIO object at 0x00000189978F4678> 列印的結果 print(sio.getvalue()) # 列印的結果是:hello,world sio.seek(5) # 第五個後開始替換 sio.write("冰冰") print(sio.getvalue()) # hello冰冰orld
注意點:
1 字串的本質是:字元序列。Python 的字串是不可變的,不支援單字元型別,單字元也是作為一個字串使用的。
2 Python3 直接支援 Unicode,可以表示世界上任何書面語言的字元。Python3 的字元 預設就是 16 位 Unicode 編碼,ASCII 碼是 Unicode 編碼的子集。
使用內建函式 ord()可以把字元轉換成對應的 Unicode 碼; 使用內建函式 chr()可以把十進位制數字轉換成對應的字元。
3 轉義字元
4 字串複製>>> a = 'Sxt'*3 >>> a 'SxtSxtSxt
5 不換行列印
print("sxt",end=' ') print("sxt",end='##') print("sxt") 執行結果: sxt sxt##sxt
6 從控制檯讀取字串 使用 input()從控制檯讀取鍵盤輸入的內容
>>> myname = input("請輸入名字:")
請輸入名字:小馬哥
>>> myname '小馬哥'
7 str()實現數字轉型字串
str(5.20) ==> ‘5.20’
str(3.14e2)==>’314.0’
str(True) ==> ‘True
8 使用[]提取字元
正向搜尋: 最左側第一個字元,偏移量是 0,第二個偏移量是 1,以此類推。直到 len(str)-1 為止。
反向搜尋: 最右側第一個字元,偏移量是-1,倒數第二個偏移量是-2,以此類推,直到-len(str) 為止
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a 'abcdefghijklmnopqrstuvwxyz'
>>> a[0] 'a'
>>> a[3] 'd'
>>> a[26-1] 'z'
>>> a[-1]
z'
>>> a[-26] 'a'
>>> a[-30]
Traceback (most recent call last):
File "<pyshell#91>", line 1, in <module>
a[-30] IndexError: string index out of range
9 replace()實現字串替換
字串不可改變。但是,我們確實有時候需要替換某些字元。這時,只能通過建立新的字元 串來實現。
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a 'abcdefghijklmnopqrstuvwxyz'
>>> a = a.replace('c','高')
'ab 高 defghijklmnopqrstuvwxyz'
10 字串切片 slice 操作
切片 slice 操作可以讓我們快速的提取子字串。標準格式為: [起始偏移量 start:終止偏移量 end:步長 step]
11 split()分割和 join()合併
split()可以基於指定分隔符將字串分隔成多個子字串(儲存到列表中)。如果不指定分隔 符,則預設使用空白字元(換行符/空格/製表符)
>>> a = "to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']
join()的作用和 split()作用剛好相反,用於將一系列子字串連線起來
>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'
使用字串拼接符+,會生成新的字串物件,因此不推薦使用+來拼接字串。推薦 使用 join 函式,因為 join 函式在拼接字串之前會計算所有字串的長度,然後逐一拷貝, 僅新建一次物件
12 字串駐留機制和字串比較
字串駐留:僅儲存一份相同且不可變字串的方法,不同的值被存放在字串駐留池中。 Python 支援字串駐留機制,對於符合識別符號規則的字串(僅包含下劃線(_)、字母 和數字)會啟用字串駐留機制駐留機制。
>>> a = "abd_33"
>>> b = "abd_33"
>>> a is b True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d False
>>> str1 = "aa"
>>> str2 = "bb"
>>> str1+str2 is "aabb"
False
>>> str1+str2 == "aabb"
True
13 字串比較和同一性
我們可以直接使用==,!=對字串進行比較,是否含有相同的字元。 我們使用 is / not is,判斷兩個
物件是否同一個物件。比較的是物件的地址,即 id(obj1)是 否和 id(obj2)相等。
14 成員操作符
in /not in 關鍵字,判斷某個字元(子字串)是否存在於字串中。
15 字串常用方法彙總
我們以一段文字作為測試:
a='''我是小馬哥,今年 18 歲了,我在北京尚學堂科技上班。我的兒子叫高洛希,他 6 歲了。我 是一個程式設計教育的普及者,希望影響 6000 萬學習程式設計的中國人。我兒子現在也開始學習編 程,希望他 18 歲的時候可以超過我''
16 去除首尾資訊
我們可以通過 strip()去除字串首尾指定資訊。通過 lstrip()去除字串左邊指定資訊, rstrip()去除字串右邊指定資訊
17 大小寫轉換
18 格式排版
center()、ljust()、rjust()這三個函式用於對字串實現排版。示例如下:
>>> a="SXT"
>>> a.center(10,"*")
'***SXT****'
>>> a.center(10)
' SXT '
>>> a.ljust(10,"*")
'SXT*******'
19 其他方法
- isalnum() 是否為字母或數字
- isalpha() 檢測字串是否只由字母組成(含漢字)。
- isdigit() 檢測字串是否只由數字組成。
- isspace() 檢測是否為空白符
- isupper() 是否為大寫字母
- islower() 是否為小寫字母
>>> "sxt100".isalnum()
True
>>> "sxt 尚學堂".isalpha()
True
>>> "234.3".isdigit()
False
>>> "23423".isdigit()
True
>>> "aB".isupper()
False
>>> "A".isupper()
True
>>> "\t\n".isspace()
True
20 字串的格式化
基本語法是通過 {} 和 : 來代替以前的 % 。 format 函式可以接受不限個引數,位置可以不按順序