2018-08-22 Day3-字符串

1.數(shù)據(jù)存儲形式

計算機以二進制的形式存儲

(1).原碼:數(shù)據(jù)的二進制形式

10 --> 1010 原碼:00001010
-10 --> 原碼:10001010

(2).反碼

  • 正數(shù)的反碼:反碼和原碼一樣
  • 負數(shù)的反碼:符號位不變卤妒,后面每一位取反
    10 --> 反碼:00001010
    -10 --> 反碼:11110101

(3).補碼

  • 正數(shù)的補碼:補碼和原碼一樣
  • 負數(shù)的補碼:符號位不變,后面每一位取反再加1(反碼+1)

2.認識字符串

  • 用單引號或者雙引號括起來的字符集就是字符串
  • 字符串中的每個獨立的單元就叫字符

3.轉(zhuǎn)義字符

  • 通過 \ 將一些特殊的字符轉(zhuǎn)換成一個具有特殊功能或特殊意義的字符,就是轉(zhuǎn)義字符蹦狂。
  • 常見的轉(zhuǎn)義字符
    \n --- 換行
    \t --- 制表符(tab)
    \' --- '

(1).需要顯示轉(zhuǎn)義字符,在前面加 \ 即可命浴。
\\ --- \
計算字符串長度的時候署拟,轉(zhuǎn)義字符的長度是1

/n    /t   //  

(2).如果需要同時轉(zhuǎn)義多個字符,可以在字符串前面加 r 即可妙色。

a = r'abcd\nsde\t'
print(a)

abcd\nsde\t     #a

(3).python中字符的編碼采用的是Unicode編碼
A.Unicode編碼包括了ASCII碼。
B.Unicode是采用兩個字節(jié)對一個字符進行編碼(2^15),將世界上所有符號進行編碼慧耍。

  • 將字符轉(zhuǎn)換成指定的數(shù)值身辨,這個過程就是編碼(目的是方便計算機存儲)
  • 將數(shù)值轉(zhuǎn)換成對應的符號的過程及時反編碼(解碼)

Unicode和字符的轉(zhuǎn)換
1).將Unicode碼轉(zhuǎn)換成字符:chr(編碼)--

print(chr(0xAC00))
print(chr(0x4e60))

?
習

2)將字符轉(zhuǎn)換成Unicode編碼:ord(字符)

code1 = ord('星')
code2 = ord('辰')
print(hex(code1), hex(code2))

0x661f 0x8fb0

4.獲取字符

  • 字符串實質(zhì)可以是一個不可變的序列,序列內(nèi)容是字符芍碧。
  • 一旦字符串確定煌珊,那么里面的字符和字符的位置就不可變了,例如‘a(chǎn)bc’

A. 怎么獲取單個字符
python中的字符串泌豆,可以通過下標(索引)來獲取指定位置上的字符:字符串[索引]
說明:
a.字符串:可以是字符串值定庵,也可以是字符串變量

b. []:中括號是固定語法

c.索引:從0開始到字符串長度減1(0對應第一個字符);-1~-長度(-1對應最后一個字符)

注意:索引不能越界踪危,否則越界J哒恪(產(chǎn)生異常)

str1 = 'abc'    #a->0 , b->1 , c->2
print(str1[2])

c

B.獲取部分字符串(獲取子串) -- 切片

注意:
步進如果是正數(shù),那么下標1對應的位置必須在下標2的前面贞远;如果步進為負數(shù)畴博,那么下標1對應的位置必須在下標2的后面

下標2對應的字符是取不到的

  • 字符串[下標1:下標2] :

說明:從下標1開始,獲取到下標2前的所有字符

str2 = 'hello world'
print(str2[0:4])
print(str2[-4:-1])

hell
orl
  • 字符串[下標1:下標2:步進]

說明:從下標1開始獲取蓝仲,每次下標值增加步進值俱病,每增加一次取一次,直到取到下標2為止袱结。

str2 = 'hello world'
print(str2[0:8:2])

hlow
[Finished in 0.3s]
  • 切片的時候亮隙,下標1和下標2是可以省略

    • 下標1省略:默認從開始的位置開始獲取(可能是第一個字符垢夹,也可能是最后一個開始溢吻,取決于步進)

    • 下標2省略:從下標1開始獲取(同上)

    效果如下:

    str2 = 'hello world'
    print(str2[:8:1])
    print(str2[:8:-1])
    print(str2[1::1])
    print(str2[1::-1])
    
    hello wo
    dl
    ello world
    eh
    [Finished in 0.3s]
    
    • 下標1和下標2都省略
    str = 'hello world and python'
    print(str[::2])      #打印所有奇數(shù)位
    
    hlowrdadpto
    [Finished in 0.3s]
    

5.字符串運算

1.加法運算
python支持兩個字符串相加果元,效果就是將兩個字符串拼接在一起產(chǎn)生一個新的字符串

print('abc'+'123')

abc123
[Finished in 0.3s]

注意:“+”號的兩邊必須是同一類型

2.乘法運算
格式:字符串*整數(shù)

print('abc' * 3)

abcabcabc
[Finished in 0.2s]

3.支持所有的比較運算符

str1 = 'abc'
print('abc' == str1)
print('abcd' > 'ac')  
#每一位依次比較其 Unicode碼值大小

True
False
[Finished in 0.3s]

4.in 和 not in
'a' in 'abd' : 判斷 'a' 是否在 'abd' 中
判斷結(jié)果為布爾值

5.獲取字符串長度
字符串長度 = 字符串個數(shù)
使用 len() 內(nèi)置函數(shù)

str3 = 'project'
print(len(str3))

7

補充:空串

str = ''    #長度是0

6.阻止轉(zhuǎn)義
在字符串的最前面添加 r/R 可以阻止轉(zhuǎn)義

print(r'a\nb')

a\nb

7.python為字符串提供了很多的內(nèi)建函數(shù)

格式: 字符串.函數(shù)()

這些所有函數(shù)的功能都不會影響原來的字符串煤裙,而是產(chǎn)生一個新的字符串

A.capitalize():將字符串第一個字符轉(zhuǎn)換成大寫

str1 = 'hello world'
print(str1.capitalize())

Hello world
[Finished in 0.2s]

B.center(width, fillchar) : 讓字符串居中(width 寬度 掩完, fillchar 填充的字符)

print('abc'.center(10,'*'))

***abc****

C.rjust(width , fillchar) : 讓字符串局右(width 寬度 , fillchar 填充的字符)

number = '1'
new_id = number.rjust(3,'0')
print(new_id)

001
[Finished in 0.2s]

同理 ljust(width硼砰,fillchar)左對齊

D. str.count(sub, start= 0,end=len(string))
統(tǒng)計次數(shù)(sub是搜索的子字符串,start和end分別是開始和結(jié)束位置)

print('adgfdsaaa' .count('a'))

4

E.str1.join(str2)
在str2中的每個字符串之間插入一個str1

print('+'.join('abc'))

a+b+c

F. str1.replace(old, new,num)
將str1中的old全部替換成new(num表示替換前幾個)

new_str = 'abcdfdwdadfswqaqd'.replace('a','+')
print(new_str)

+bcdfdwd+dfswq+qd

6.字符串的格式化

語法:'格式符' %(格式符對應的值)

  • 常見格式化字符:

    • 格式化字符串 ---> %s
    • 格式化數(shù)字 ---> %d
    • 格式化浮點數(shù) ---> %f
    • 格式化字符 ---> %c (一般用于ascii碼或者Unicode碼)
first_name = '星'
last_name = '辰'
age = 18
newstr = 'hello,%s%s!今年%d歲' %(first_name,last_name,age)
print(newstr)

hello,星辰!今年18歲
[Finished in 0.5s]

%n.mf :m表示顯示的最小總寬度欣硼,n表示小數(shù)點位數(shù)

a = 3434.12345
print('%8.4f'%a)

3434.1235
[Finished in 0.6s]

附:


格式化.png

7.數(shù)據(jù)類型轉(zhuǎn)換

1.數(shù)據(jù)類型的自動轉(zhuǎn)換

a = 10   #整型 
b = 12.5   #浮點型
result = a+ b  #浮點型--會自動轉(zhuǎn)換整型為浮點型 

2.強制轉(zhuǎn)換
基本語法:類型名(數(shù)據(jù))

  • 其他類型 ---> 整型
    int(12.5)---> 12
    去掉字符串的引號后题翰,字符串的本身就是整數(shù),才能轉(zhuǎn)換成整型
    int('123') ---> 123
    int ( '123a')
    int ('123.5')

  • 其他類型 ---> 浮點型
    float(True) ---> 1.0
    去掉字符串的引號后诈胜,字符串的本身就是浮點數(shù)豹障,才能轉(zhuǎn)換成浮點型
    float('2e3') ---> 2000.0

  • 其他類型 ---> 布爾型
    所有數(shù)據(jù)類型的數(shù)據(jù)都可以轉(zhuǎn)換成布爾
    (1).數(shù)字中:除了0都是True
    bool(100) ---> True
    bool(-12.5) ---> True
    bool (0) ---> False
    (2).字符串中除了空串都是True
    bool ('False') ---> True
    bool ('') ---> False
    bool (None) ---> False

  • 其他類型 ---> 字符串
    所有數(shù)據(jù)都可以轉(zhuǎn)換成字符串
    str(100) ---> '100'
    str(True) ---> 'True'

8.字符串相關方法

python的字符串內(nèi)建函數(shù)

name.split(',')
按照逗號分割(不寫默認按照空格分割)

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

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

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

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 結(jié)束累魔,如果beg 或者 end 指定則檢查指定的范圍內(nèi)是否以 obj 結(jié)束,如果是够滑,返回 True,否則返回 False.

string.expandtabs(tabsize=8)
字符串 string 中的 tab 符號轉(zhuǎn)為空格垦写,tab 符號默認的空格數(shù)是 8。

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

string.format()
格式化字符串

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

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

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

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

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

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

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

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

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

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

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

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

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

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

string.maketrans(intab, outtab)
maketrans() 方法用于創(chuàng)建字符映射的轉(zhuǎn)換表,對于接受兩個參數(shù)的最簡單的調(diào)用方式红氯,第一個參數(shù)是字符串框咙,表示需要轉(zhuǎn)換的字符咕痛,第二個參數(shù)也是字符串表示轉(zhuǎn)換的目標。

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

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

string.partition(str)
有點像 find()和 split()的結(jié)合體,從 str 出現(xiàn)的第一個位置起,把 字 符 串 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()函數(shù)者铜,不過是從右邊開始查找.

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

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

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

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

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

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

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

string.strip([obj])

在 string 上執(zhí)行 lstrip()和 rstrip()
string.swapcase()

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

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

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

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

string.isdecimal()
isdecimal()方法檢查字符串是否只包含十進制字符。這種方法只存在于unicode對象讨勤。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末箭跳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子潭千,更是在濱河造成了極大的恐慌谱姓,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刨晴,死亡現(xiàn)場離奇詭異屉来,居然都是意外死亡,警方通過查閱死者的電腦和手機狈癞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門茄靠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蝶桶,你說我怎么就攤上這事慨绳。” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵脐雪,是天一觀的道長厌小。 經(jīng)常有香客問我,道長战秋,這世上最難降的妖魔是什么璧亚? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮获询,結(jié)果婚禮上涨岁,老公的妹妹穿的比我還像新娘。我一直安慰自己吉嚣,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布蹬铺。 她就那樣靜靜地躺著尝哆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甜攀。 梳的紋絲不亂的頭發(fā)上秋泄,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音规阀,去河邊找鬼恒序。 笑死,一個胖子當著我的面吹牛谁撼,可吹牛的內(nèi)容都是我干的歧胁。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼厉碟,長吁一口氣:“原來是場噩夢啊……” “哼喊巍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起箍鼓,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤崭参,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后款咖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體何暮,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年铐殃,在試婚紗的時候發(fā)現(xiàn)自己被綠了海洼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡背稼,死狀恐怖贰军,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤词疼,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布俯树,位于F島的核電站,受9級特大地震影響贰盗,放射性物質(zhì)發(fā)生泄漏许饿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一舵盈、第九天 我趴在偏房一處隱蔽的房頂上張望陋率。 院中可真熱鬧,春花似錦秽晚、人聲如沸瓦糟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽菩浙。三九已至,卻和暖如春句伶,著一層夾襖步出監(jiān)牢的瞬間劲蜻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工考余, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留先嬉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓楚堤,卻偏偏與公主長得像疫蔓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钾军,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容