python(字符串)


字符串

 

字符串是 Python 中最常用的數據類型。我們可以使用引號('或"或''')來創建字符串。

 

Python 中三引號可以將復雜的字符串進行賦值。

Python 三引號允許一個字符串跨多行,字符串中可以包含換行符、制表符以及其他特殊字符。

三引號的語法是一對連續的單引號或者雙引號(通常都是成對的用)

其中三引號中的字符串可以換行

a = "python001"
b = 'python002'
c = '''pytho
        n003'''
print(a)
print(b)
print(c)

 

訪問字符串里的值

變量【頭下標:尾下標】/【頭下標:尾下標:步長】

a = "python001"         #a[0]=p;a[1]=y;a[2]=t;....a[8]=1
print(a[0])             #取a[0]
print(a[1:5])           #取a[1]到a[4];a不包括[5]
print(a[:8])            #頭下標不填默認從a[0]開始
print(a[0:])            #尾下標不填默認到最后a[8]結束
print(a[:])             
print(a[-1])            #a[-1]=1;a[-2]=0;a[-3]=0;.....a[-9]=p(反過來取相當於)
print(a[-2])

 補充:

print(a[-2:])           #如果【頭下標】為負數,默認從尾部某一位置,開始向后截取

print(a[3:3])          #如果【頭下標】>=【尾下標】, 默認輸出為空

 

 

字符串切片

【頭下標:尾下標:步長】

 

 

步長為負數時,則從末尾開始往前取

取不到值時,輸出為空

s = '123456789'
res3 = s[0:7:2]               #s[0:7:2]表示從s[0]開始到s[7]結束,步長2;取s[0]、s[2]、s[4]、s[6];即1357
print(res3)
print(s[::4])                 #s[::4]不填表示默認從頭到尾,即s[0]到s[8],步長4

 

 

 

重復輸出字符串

a = "python001"
print(a*2)           #*3就輸出三次

 

字符串連接

a="hello"
b="python!"
print(a+" "+b)
print("輸出:",a+b)
print("輸出:",a+" python")

 

 

判斷字符是否存在字符串中

in  成員運算符,如果字符串中包含指定字符返回ture,否則返回false

not in   成員運算符,如果字符串中包含指定字符返回ture,否則返回false

a="hello"
b="python!"
print('h' in a)
print('6' in a)
print('6'not in b)
print('py'not in b)

 

格式化字符串

name="zhang"
age=3
print("my name is %s and age is %d"%(name,age))

%c                              格式化字符及其ASCII碼
%s                              格式化字符串
%d                              格式化整數
%u                              格式化無符號整型
%o                              格式化無符號八進制數
%x                              格式化無符號十六進制數
%X                             格式化無符號十六進制數(大寫)
%f                               格式化浮點數字,可指定小數點后的精度(%.2f)
%e                              用科學計數法格式化浮點數
%E                              作用同%e,用科學計數法格式化浮點數
%g                              %f和%e的簡寫(%g 用於打印數據時,會去掉多余的零,至多保留六位有效數字)
%G                             %F 和 %E 的簡寫
%p                              用十六進制數格式化變量的地址

 

 格式化操作符輔助指令

*                     定義寬度或者小數點精度
-                     用做左對齊
+                    在正數前面顯示加號( + )
<sp>              在正數前面顯示空格
#                    在八進制數前面顯示零('0'),在十六進制前面顯示'0x'或者'0X'(取決於用的是'x'還是'X')
0                    顯示的數字前面填充'0'而不是默認的空格
%                   '%%'輸出一個單一的'%'
(var)               映射變量(字典參數)
m.n.               m是顯示的最小總寬度,n 是小數點后的位數(如果可用的話)

補充進制轉換:

>>> num=10
>>> print('十六進制:%#x' % num)    #使用%x將十進制num格式化為十六進制
十六進制:0xa
>>> print('二進制:', bin(num))      #使用bin將十進制num格式化為二進制
二進制: 0b1010
>>> print('八進制:%#o' % num)      #使用%o將十進制num格式化為八進制
八進制:0o12

#上面使用格式化符號進行進制轉換中,多加入了一個#號,目的是在轉換結果頭部顯示當前進制類型,如不需要,可將#號去除,如下

>>> print('八進制:%o' % num)
八進制:12
>>> print('十六進制:%x' % num)
十六進制:a

 

格式化字符串(f-string)

python3.6版本后出現的方法

f-string 格式化字符串以 f 開頭,后面跟着字符串,字符串中的表達式用大括號 {} 包起來,它會將變量或表達式計算后的值替換進去

a = "python"
b = "666"
c = {'name':'wang','age':'18'}
print(f"hello {a}")
print(f"{1+2}")                                   #計算值
print(f"{a+b}")                                   #字符串連接
print(f"{a[0]}")
print(f"my name is {c['name']},i am {c['age']}")  #取字典值

 

 

 python3.8后可以使用 = 符號來拼接運算表達式與結果

x = 1
print(f'{x+1}')   # Python 3.6

輸出結果:2

x = 1
print(f'{x+1=}')   # Python 3.8

輸出結果:x+1=2

 

轉義字符

\(在行尾時)       續行符
\\                       反斜杠符號
\'                       單引號
\"                      雙引號
\a                      響鈴
\b                      退格(Backspace)
\e                      轉義(python2.X有,3.X無)
\000                  空
\n                      換行
\v                       縱向制表符
\t                       橫向制表符
\r                       回車
\f                       換頁
\oyy                 八進制數,y 代表 0~7 的字符,例如:\012 代表換行。
\xyy                 十六進制數,以 \x 開頭,yy代表的字符,例如:\x0a代表換行
\other              其它的字符以普通格式輸出

 

Unicode 字符串

python2.x版本普通字符串是以8位ASCII碼進行存儲的,而Unicode字符串則存儲為16位unicode字符串,這樣能夠表示更多的字符集。使用的語法是在字符串前面加上前綴 u

在Python3.X中,所有的字符串都是Unicode字符串(以下例子是3.X版本)

a = "python\u0021"        #\u0021為“!”符號的字符編碼
b = u"python\u0021"
print(a)
print(type(a))
print(b)
print(type(b))

 

字符串內置函數(2.X)

string.capitalize()                                                      把字符串的第一個字符大寫

string.center(width, fillchar)                                      返回一個原字符串居中,並使用空格填充至長度 width 的新字符串

string.count(str, beg=0, end=len(string))                  返回 str 在 string 里面出現的次數,如果 beg 或者 end 指定則返回指定范圍內 str 出現的次數

string.decode(encoding='UTF-8', errors='strict')      以 encoding 指定的編碼格式解碼 string,如果出錯默認報一個 ValueError 的 異 常 , 除非 errors 指 定 的 是 'ignore' 或 者'replace'

string.encode(encoding='UTF-8', errors='strict')      以 encoding 指定的編碼格式編碼 string,如果出錯默認報一個ValueError 的異常,除非 errors 指定的是'ignore'或者'replace'

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

string.expandtabs(tabsize=8)                                  把字符串 string 中的 tab 符號轉為空格,tab 符號默認的空格數是 8。

string.find(str, beg=0, end=len(string))                    檢測 str 是否包含在 string 中,如果 beg 和 end 指定范圍,則檢查是否包含在指定范圍內,如果是返回開始的索引值,否則返回-1

string.format()                                                          格式化字符串

string.index(str, beg=0, end=len(string))                  跟find()方法一樣,只不過如果str不在 string中會報一個異常.

string.isalnum()                                                        如果 string 至少有一個字符並且所有字符都是字母或數字則返回 True,否則返回 False

string.isalpha()                                                         如果 string 至少有一個字符並且所有字符都是字母則返回 True,否則返回 False

string.isdecimal()                                                     如果 string 只包含十進制數字則返回 True 否則返回 False.

string.isdigit()                                                           如果 string 只包含數字則返回 True 否則返回 False.

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

string.isnumeric()                                                     如果 string 中只包含數字字符,則返回 True,否則返回 False

string.isspace()                                                        如果 string 中只包含空格,則返回 True,否則返回 False.

string.istitle()                                                            如果 string 是標題化的(見 title())則返回 True,否則返回 False

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

string.join(seq)                                                         以 string 作為分隔符,將 seq 中所有的元素(的字符串表示)合並為一個新的字符串

string.ljust(width)                                                     返回一個原字符串左對齊,並使用空格填充至長度 width 的新字符串

string.lower()                                                            轉換 string 中所有大寫字符為小寫.

string.lstrip()                                                             截掉 string 左邊的空格

string.maketrans(intab, outtab])                               maketrans() 方法用於創建字符映射的轉換表,對於接受兩個參數的最簡單的調用方式,第一個參數是字符串,表示需要轉換的字符,第二個參數也是字符串表示轉換的目標。

max(str)                                                                    返回字符串 str 中最大的字母。

min(str)                                                                     返回字符串 str 中最小的字母。

string.partition(str)                                                    有點像 find()和 split()的結合體,從 str 出現的第一個位置起,把 字 符 串 string 分 成 一 個 3 元 素 的 元 組 (string_pre_str,str,string_post_str),如果 string 中不包含str 則 string_pre_str == string.

string.replace(str1, str2, num=string.count(str1))     把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次.

string.rfind(str, beg=0,end=len(string) )                    類似於 find() 函數,返回字符串最后一次出現的位置,如果沒有匹配項則返回 -1。

string.rindex( str, beg=0,end=len(string))                 類似於 index(),不過是返回最后一個匹配到的子字符串的索引號。

string.rjust(width)                                                      返回一個原字符串右對齊,並使用空格填充至長度 width 的新字符串

string.rpartition(str)                                                   類似於 partition()函數,不過是從右邊開始查找

string.rstrip()                                                             刪除 string 字符串末尾的空格.

string.split(str="", num=string.count(str))                  以 str 為分隔符切片 string,如果 num 有指定值,則僅分隔 num+1 個子字符串

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

string.startswith(obj, beg=0,end=len(string))            檢查字符串是否是以 obj 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定范圍內檢查.

string.strip([obj])                                                        在 string 上執行 lstrip()和 rstrip()

string.swapcase()                                                      翻轉 string 中的大小寫

string.title()                                                                返回"標題化"的 string,就是說所有單詞都是以大寫開始,其余字母均為小寫(見 istitle())

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

string.upper()                                                             轉換 string 中的小寫字母為大寫

string.zfill(width)                                                        返回長度為 width 的字符串,原字符串 string 右對齊,前面填充0

字符串內置函數(3.X)

capitalize()                                                                將字符串的第一個字符轉換為大寫
center(width, fillchar)                                                返回一個指定的寬度 width 居中的字符串,fillchar 為填充的字符,默認為空格。

count(str, beg= 0,end=len(string))                            返回 str 在 string 里面出現的次數,如果 beg 或者 end 指定則返回指定范圍內 str 出現的次數

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

encode(encoding='UTF-8',errors='strict')                 以 encoding 指定的編碼格式編碼字符串,如果出錯默認報一個ValueError 的異常,除非 errors 指定的是'ignore'或者'replace'

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

expandtabs(tabsize=8)                                            把字符串 string 中的 tab 符號轉為空格,tab 符號默認的空格數是 8 。

find(str, beg=0, end=len(string))                              檢測 str 是否包含在字符串中,如果指定范圍 beg 和 end ,則檢查是否包含在指定范圍內,如果包含返回開始的索引值,否則返回-1

index(str, beg=0, end=len(string))                           跟find()方法一樣,只不過如果str不在字符串中會報一個異常。

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

isalpha()                                                                  如果字符串至少有一個字符並且所有字符都是字母或中文字則返回 True, 否則返回 False

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

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

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

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

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

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

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

len(string)                                                               返回字符串長度

ljust(width[, fillchar])                                               返回一個原字符串左對齊,並使用 fillchar 填充至長度 width 的新字符串,fillchar 默認為空格。

lower()                                                                   轉換字符串中所有大寫字符為小寫.

lstrip()                                                                    截掉字符串左邊的空格或指定字符。

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

max(str)                                                                返回字符串 str 中最大的字母。

min(str)                                                                 返回字符串 str 中最小的字母。

replace(old, new [, max])                                      把 將字符串中的 old 替換成 new,如果 max 指定,則替換不超過 max 次。

rfind(str, beg=0,end=len(string))                          類似於 find()函數,不過是從右邊開始查找.

rindex( str, beg=0, end=len(string))                     類似於 index(),不過是從右邊開始.

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

rstrip()                                                                  刪除字符串末尾的空格或指定字符。

split(str="", num=string.count(str))                       以 str 為分隔符截取字符串,如果 num 有指定值,則僅截取 num+1 個子字符串

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

startswith(substr, beg=0,end=len(string))            檢查字符串是否是以指定子字符串 substr 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定范圍內檢查。

strip([chars])                                                         在字符串上執行 lstrip()和 rstrip()

swapcase()                                                          將字符串中大寫轉換為小寫,小寫轉換為大寫

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

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

upper()                                                               轉換字符串中的小寫字母為大寫

zfill (width)                                                          返回長度為 width 的字符串,原字符串右對齊,前面填充0

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

 

 

補充:

字符串的分割還有partition()這種方式:

s1 = "I'm a good sutdent."
#以'good'為分割符,返回頭、分割符、尾三部分。
s2 = s1.partition('good')
#沒有找到分割符'abc',返回頭、尾兩個空元素的元組。
s3 = s1.partition('abc')

print(s1)
print(s2)
print(s3)

結果:
I'm a good sutdent.
("I'm a ", 'good', ' sutdent.')
("I'm a good sutdent.", '', '')

字符串等倒序:

ch = "我給大佬點煙。"
ls = [0, 1, 2, 3, 4]
st = (0, 1, 2, 3, 4)
print(ch[::-1])
print(ls[::-1])
print(st[::-1])


結果:
。煙點佬大給我
[4, 3, 2, 1, 0]
(4, 3, 2, 1, 0)

字符串與列表,元組的互相轉換:

#字符串轉換為列表
var='字符串'
list=[]
list=[i for i in var]


#列表轉化為字符串
var1=' ,'.join(list)

#字符串轉化為元組,使用 tuple() 函數
tup=tuple(var)

Ip掩碼換算:

b = '1'
bs_len = len(b)
while bs_len < 9:
    #global b
    b_b=b.ljust(8,'0')
    d=int(b_b,2)
    print('二進制 %s 相當於十進制 %s' %(b_b,d))
    b = b +"1"
    bs_len=len(b)


結果:
二進制 10000000 相當於十進制 128
二進制 11000000 相當於十進制 192
二進制 11100000 相當於十進制 224
二進制 11110000 相當於十進制 240
二進制 11111000 相當於十進制 248
二進制 11111100 相當於十進制 252
二進制 11111110 相當於十進制 254
二進制 11111111 相當於十進制 255

針對 Counter 的升級使用

#必須引用如下庫
from collections import Counter

#定義兩個字符串變量
Var1 = "1116122137143151617181920849510"
Var2 = "1987262819009787718192084951"

#以字典的形式,輸出每個字符串中出現的字符及其數量
print (Counter(Var1))
print (Counter(Var2))


結果:
Counter({'1': 12, '2': 3, '6': 2, '3': 2, '7': 2, '4': 2, '5': 2, '8': 2, '9': 2, '0': 2})
Counter({'1': 5, '9': 5, '8': 5, '7': 4, '2': 3, '0': 3, '6': 1, '4': 1, '5': 1})

格式化字符串format()

format:
1、可以在{}中指定填充數據的位置
desc2 = "今收到{1},交來學費{0}元,開此收據為憑".format('李四', 800)
2、格式化小數位數
desc2 = "今收到{},交來學費{:.3f}元,開此收據為憑".format('李四', 888.99499923232)
3、格式化百分比顯示:
desc3 = '接口自動的用例執行通過率為 {:.1%}'.format(0.8899)
4、格式化字符串的長度:
{:^20}: ^居中對齊
{:<20}: 左對齊
{:>20}: 右對齊
{:*>20}:可以在對齊符號的前面指定填充字符

desc2 = "今收到{1},交來學費{0}元,開此收據為憑".format('李四', 800)
print(desc2)

desc2 = "今收到{},交來學費{:.3f}元,開此收據為憑".format('李四', 888.99499923232)
print(desc2)

desc3 = '接口自動的用例執行通過率為 {:.1%}'.format(0.8899)
print(desc3)

print("今收到{:*^20},交來學費80元,開此收據為憑".format('dasda'))
print("今收到{:$>20},交來學費80元,開此收據為憑".format('dsiuauidas'))
print("今收到{:$>20},交來學費80元,開此收據為憑".format('ds'))
print("今收到{:*>20},交來學費80元,開此收據為憑".format('dsasdasdsasda'))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM