一、字元串
字元串就是由若幹個不同的unicode字元組成的不可變有序序列
1 .字元串建立
#單引号字元串
str1 = '天要下雨,娘要嫁人,由他去吧'
str2 = str() #空串
str3 = str([10,20,30])
#雙引号字元串
str2 = "天要下雨,娘要嫁人,由他去吧"
#三引号字元串 多行字元串
str3 = '''
好雨知時節
當春乃發生
'''
str4 = """
随風潛入夜
潤物細無聲
""
2.擷取字元
因為是不可變序列,是以不能修改單個字元;凡是修改字元串的操作都産生新串
str1 = '天要下雨,娘要嫁人,由他去吧'
print(str1[0],str1[-1]) #天 吧
3.字元串轉義
- 常見轉義字元
轉移字元 | 說明 | 轉移字元 | 說明 |
---|---|---|---|
| 單引号 | | 換行 |
| 雙引号 | | 回車 |
| tab | | \ |
-
原生字元
如果在字元串中不把\當做轉移字元,可以使用
str1 = r’c:\wh1803\course\1’
print(str1) #c:\wh1803\course\1
4.序列通用操作
#1 字元串拼接
#對于字元串字面值,隻要相鄰兩個字元串中間沒有其他字元就會自動拼接為一個字元串
str1 = '中美達成共識'
'不打貿易戰'
print(str1) #中美達成共識不打貿易戰
#其他情況使用+運算符拼接字元串
str1 = '你好'
str2 = ' 樹先生'
print(str1 + '世界')
print(str1 + str2)
#2.字元串重複
str1 = '汪' * 3
print(str1) #汪汪汪
#3.成員操作
str1 = '天要下雨,娘要嫁人,由他去吧'
if '天' in str1:
print('是成員')
else:
print('不是成員')
#4.字元串截取(切片)
str1 = '123456'
print(str1[0:2]) #'12'
print(str1[1:]) #'23456'
print(str1[::2]) #'135'
print(str1[:]) #'123456'
print(str1[::-1]) #'654321'
#5.字元串長度
print(len(str1))
5 字元串常用函數
5.1 字元串查找和替換
str1 = ‘a fox jumped over the fence’
方法名 | 說明 | 示例 |
---|---|---|
str.count(sub,start=0,end=len(string)) | 查找子串sub出現的次數;start從指定下标開始查,end結束下标 | str1.count(‘f’) |
str.find(str, beg=0, end=len(string)) | 從左向右檢測字元串中是否包含子字元串 str,如果包含傳回下标,否則傳回-1。beg和end是可選參數,指定查找範圍 | str1.find(‘fox’) |
str.rfind(sub[, start[, end]]) | 從右向左檢測字元串中是否包含sub子串,包含傳回子串的下标,否則傳回-1 | str1.rfind(‘fox’) |
str.index(sub[, start[, end]]) | 作用類似find,但子串sub不存在會報錯ValueError | str1.index(‘fox’) |
str.rindex(sub[, start[, end]]) | 從右向左檢測,類似rfind,會報ValueError | str1.rindex(‘fox’) |
str.replace(old, new[, count]) | 傳回一個新字元串,原串中的old被替換為new,可選參數count指定替換次數。 | str1.replace(‘a’,‘many’) |
5.2 字元串分隔群組合
方法名 | 說明 | 示例 |
---|---|---|
str.split([sep[, num=count(sep)]]) | 将字元串拆分為以sep為分隔符的清單,如果指定num,則最多拆分num次 | str1.split(’ ') |
str.rsplit([sep[, num=count(sep)]]) | 從右向左拆分 | |
str.partition(seq) | 将字元串拆分為一個有三個元素的元組(seq前的字元串,seq,seq後的字元串)。 | |
str.rpartion(seq) | 同上 | |
str.splitlines([keepends]) | 拆分一個包含多行的字元串,以每行為一個元素傳回一個清單。keepends是一個True字元或非零整數,表示保留行尾标志(即換行符) | |
str.join(seq) | 以指定字元串str作為分隔符,将seq對象中所有的元素(字元串表示)合并為一個新的字元串;seq可以是字元串、清單等 |
5.3 字元串判斷
方法 | 說明 | 示例 |
---|---|---|
str.isalpha() | 判斷字元串是否由字母構成并且隻包含字母,是傳回True,否傳回False | str1.isalpha() |
str.isalnum() | 檢測字元串是否由字母和數字組成,如果都是數字或字母傳回True,否則傳回False | |
str.isdigit() | 檢測字元串是否由數字構成,可檢測byte類型 | |
str.isdecimal() | 檢測字元串是否由數字構成 | |
str.isnumeric() | 檢測字元串是否由數字構成, 可以檢測漢字數字:十 | |
str.isspace() | 檢測字元串是否隻有空格或tab構成 | |
str.islower() | 檢測字元串中的字母字元是否全部由小寫字母組成 | |
str.isupper() | 檢測字元串中的字母字元是否全部由大寫寫字母組成 | |
str.startswith(suffix[, start[, end]]) | 用于判斷字元串是否以指定子字元串開頭,如果是則傳回True,否則傳回False。 | |
str.endswith(suffix[, start[, end]]) | 用于判斷字元串是否以指定子字元串 結尾,如果是則傳回True,否則傳回False。 |
5.4字元串轉換(産生新的字元串)
方法 | 說明 | 示例 |
---|---|---|
str.lower() | 字元串轉小寫 | |
str.upper() | 字元串轉大寫 | |
str.swapcase() | 把字元串中的大小寫字母互換,大寫轉換成小寫,小寫轉換成大寫。不去管非字母類字元。 | |
str.capitalize() | 将字元串的第一個字元轉換為大寫, 其餘轉換為小寫 | |
str.title() | 字元串中每個單詞的首字母大寫,其餘小寫。 | |
str.lstrip([chars]) | 去除字元串左邊指定的字元,預設是去除空格 | |
str.rstrip([chars]) | 去除字元串左邊指定的字元,預設是去除空格 | |
str.strip([chars]) | 去除字元串兩邊邊指定的字元,預設是去除空格 |
4.5 其它方法
#1. 将其他類型轉換為字元串
print(str(90)) #'90'
print(str([20,30])) #'[20,30]'
#2 ord(x) 傳回一個字元所對應的碼值
print(ord('a')) #97
print(ord('中')) #20013
#3 chr(x) 輸入一個unicode碼,傳回一個對應的字元。
print(chr(20013)) #中
#eval,将字元串當做代碼執行
age = 1
print(eval('age + 3')) # 4
print(eval('+123')) #123
print(eval('3 + 2')) #5
#有安全問題
eval("__import__('os').system('dir')") #顯示目前目錄的檔案清單
#4 repr(x) 傳回一個對象的String格式,适合機器執行
a = [20,30]
s1 = repr(a)
list1 = eval(s1)
list2 = str(a)
print(a == list1)
print(a == list2)
6. 字元串格式化
-
用%格式化
%[flags][width][.precision]typecode
flags:對其方式,-左對齊 +右對齊(預設),0表示用0填充(隻針對數值型),預設是用空格填充
width:所占寬度,機關是列
.precision: 精度,如果帶小數點,可以指定帶幾位小數,指定後會四舍五入
typecode: d 将數值轉換為整型顯示;f 将數值轉換為浮點數顯示 s将數值轉換為字元串顯示
#大家好,我叫 王尼瑪,我今年35歲了,我有5000000.69
print(“大家好,我叫%+6s,我今年%d歲了,我有%10.2f” % (‘王尼瑪’,35,5000000.687))
- 用format格式化
[[fill]align][sign][#][width][.precision][type] fill: 填充字元,可選 align: 對齊方式 <左對齊 >右對齊 ^居中對齊 sign:顯示符号,+正數顯示正号,負數顯示符号;-正數不顯示符号,負數顯示符号 #: 對于2、8、16進制會顯示0b 0o 0x width: 寬度 , 千分位分隔符 .precision:精度 type: s字元串 d整型 f浮點數 tp1 = "I am {}, age {}, {}".format("seven", 18, 'alex') tp2 = "I am {name}, age {age}, really {name}".format(name="seven", age=18) tp3 = "I am {:s}, age {:d}, money {:.0f}".format("seven", 18, 88888.1) print(tp1) #I am seven, age 18, alex print(tp2) #I am seven, age 18, really seven print(tp3) #I am seven, age 18, money 88888