Day6 String(字符串)

1 字符串定義

  • 字符串是python提供的容器型數(shù)據(jù)類型(序列), 不可變伺通、有序
    • 不可變 - 不支持增刪改;
    • 有序 - 支持下標操作
  • python中的字符串是用單引號或者雙引號引起來的字符集箍土;引號里面的每個基本單元叫字符

2 字符

  • python中只有字符概念,沒有字符類型
  • 普通字符: 數(shù)字罐监、字母吴藻、普通符號、中文笑诅、日語等
  • 轉(zhuǎn)義字符:
    轉(zhuǎn)移字符 說明 轉(zhuǎn)移字符 說明
    \' 單引號 \" 雙引號
    \n 換行 \r 回車
    \t tab \\ \
  • 在特定的符號前加\來表示特殊功能或者特殊意義的字符
  • 阻止轉(zhuǎn)義: 在字符串的最前面加r/R调缨,能夠阻止字符串中所有的轉(zhuǎn)義
str3 = '\t12\'3\na\"bc \\none 001'
print(str3)
str4 = R'\thow\nare\nyou\"'
print(str4)
  • 注意字符長度

    • '\tabc\n123' # 長度:8
    • r'\tabc\n123' # 長度:10
  • 編碼字符: 在字符串中用'\u四位的十六進制數(shù)'來表示一個字符

str5 = '123\u4e11'
print(str5)

3 字符編碼

  • 計算機本身只有直接存儲數(shù)字的能力(存數(shù)字的二進制的補碼),為了能夠存儲數(shù)字以外的符號,
    開發(fā)人員給每個字符對應(yīng)一個固定的數(shù)字用來對字符進行存儲吆你。每個字符對應(yīng)的固定的數(shù)字就是字符的編碼值弦叶。

  • 每個字符和數(shù)字的一一對應(yīng)關(guān)系就是字符編碼表,常見的編碼表有: ASCII碼表妇多、Unicode編碼表

    • ASCII碼表采用一個字節(jié)對字符進行編碼:0-127
    • Unicode編碼表采用2個字節(jié)對字符進行編碼, 包含了ASCII碼
  • chr函數(shù): chr(編碼值) - 獲取編碼值對應(yīng)的字符

  • ord函數(shù): ord(字符) - 獲取指定字符對應(yīng)的編碼

print(chr(100), chr(0x5e00))
print(ord('a'), ord("A"))
  • 練習: 查看易經(jīng)六十四卦符號
for code in range(0x4dc0, 0x4dff):
    print(chr(code))

4 字符串操作

4.1 獲取單個字符

  • 語法: 字符串[下標] - 獲取指定下標對應(yīng)的字符
    • 字符串 - 結(jié)果是字符串的表達式(字符串值伤哺、字符串變量、運算結(jié)果是字符串)
    • [] - 固定寫法
    • 下標 - 又叫索引者祖,值是整數(shù)立莉;字符串確定后,字符串中的沒有字符都有一個確定的下標/索引表示這個字符在字符串中的位置七问。
  • python中下標有兩種蜓耻,位置從往后是 0 ~ 字符串長度-1; 位置從后往前是 -1 ~ -字符串長度
  • 注意: 獲取單個字符的時候下標不能越界
str1 = 'hello'
print(str1[0], str1[3])     # h  l
print(str1[-1])    #   獲取最右邊字符o 
str2 = '\tabc 123'
print(str2[2], str2[5])     # b  1
# print(str2[100])     # 下標越界 IndexError: string index out of range
# print(str2[-20])     # 下標越界IndexError: string index out of range
print('hello'[2])

4.2 獲取部分字符(字符串切片)

  • 語法: 字符串[開始下標:結(jié)束下標:步長] - 從開始下標開始獲取,每次增加步長取下一個值械巡;取到結(jié)束下標前為止(結(jié)束下標對應(yīng)的值取不到)

    • 字符串 - 結(jié)果是字符串的表達式(字符串值刹淌、字符串變量、運算結(jié)果是字符串)
    • []/: - 固定寫法
    • 開始下標 - 下標讥耗,整數(shù)有勾。能取到對應(yīng)的字符
    • 結(jié)束下標 - 下標,整數(shù)。對應(yīng)的字符取不到
    • 步長 - 整數(shù)古程。如果步長是正數(shù)蔼卡,從前往后取挣磨;如果步長是負數(shù)雇逞,從后往前取
  • 切片注意事項

    • 字符串切片的結(jié)果都是字符串
    • 如果步長是正數(shù)荤懂,那么開始下標對應(yīng)字符要在結(jié)束下標對應(yīng)的字符的前面,才能取到值
    • 如果步長是負數(shù)喝峦,那么開始下標對應(yīng)的字符要在結(jié)束下標對應(yīng)的字符的后面势誊,才能取到值
    • 切片的時候下標可以越界
str3 = 'abc+123'
print(str3[0:3:2])   # 'abc'  'ac'

print(str3[2:-2:1])     # 'c+1'
print('結(jié)果:', str3[2:-2:-1])    # ''

print(str3[0:-1:1])   # abc+12
print(str3[-1:2:-1])  # 321+
print(str3[-1:1:-2])  # 31c
print(str3[-100:100:1])    # abc+123

4.3 獲取部分字符的簡寫

  • 省略步長 - 步長為1 :
    • 語法:字符串[開始下標:結(jié)束下標] <===> 符串[開始下標:結(jié)束下標:1]
str4 = 'hello world'
print(str4[3:-2])     # lo wor
  • 省略開始下標 - 步長為正從字符串開頭往后獲取谣蠢;步長為負從字符串最后往前獲取
    • 語法: 字符串[:結(jié)束下標:步長] 粟耻、字符串[:結(jié)束下標]
print(str4[:5])   # hello
print(str4[:5:-1])     # dlrow
  • 省略結(jié)束下標 - 步長為正,取到字符串最后一個字符為止; 步長為負取到第一個字符為止
    • 語法: 字符串[開始下標::步長]眉踱、 字符串[開始下標:]
str4 = 'hello world'
print(str4[1:])    # ello world
print(str4[1::-1])  # eh

print(str4[:])    # 'hello world'

print(str4[::-1])  # dlrow olleh 字符串倒序

4.3 遍歷字符串 - 將字符串中的字符一個一個的取出來

  • 直接遍歷, 變量取到的就是字符
str4 = 'hello world'
for char in str4:
    print(char)
  • 簡介遍歷挤忙, 通過遍歷下標遍歷字符
str4 = 'hello world'
for index in range(-1, -11, -1):
    print(index, str4[index])
  • 練習: 統(tǒng)計輸入的字符串中,字母'a'出現(xiàn)的次數(shù)
value = input('請輸入一個字符串:')
count = 0
for char in value:
    if char == 'a':
        count += 1
print(count)

4.4 字符串的運算

4.1 數(shù)學(xué)運算符: +, *

  • 字符串1+字符串2: 兩個字符串相加 -> 將兩個字符串拼接產(chǎn)生一個新的字符串
  str1 = 'abc' + 'hello'
  print(str1)    # abchello
  • 字符串相加兩邊都要是字符串
str2 = 'abc' + 123   # TypeError: must be str, not int
  • 字符串正整數(shù)/ 正整數(shù)字符串: 字符串重復(fù)指定次數(shù)產(chǎn)生一個新的字符串
str2 = 3 * 'abc'
print(str2)

4.2 比較運算:針對兩個字符串進行比較 >, <, >=, <=, ==, !=

  • 字符串比較大小: 按位置從前往后一對一對的比較谈喳,找出第一對不相等的字符册烈,看它們的編碼值誰大,那個字符串就大
print('bbZ' > 'abaa')   # True
print('你好' > 'hello')  # True
  • 字符串比較大小應(yīng)用:

    • 判斷一個字符是否是小寫字母: 'a'<=char<='z'
    • 判斷一個字符是否是大寫字母: 'A'<=char<='Z'
    • 判斷一個字符是否是字母: 'a'<=char<='z' or 'A'<=char<='Z'
    • 判斷一個字符是否是數(shù)字字符: '0'<=char<='9'
    • 判斷一個字符是否是中文(4e00-9fa5): '\ue400'<=char<='\u9fa5', '一'<=char<='龥'
  • 練習: 統(tǒng)計一個字符串中大寫字母的個數(shù)

str4 = 'How Are You!'
count = 0
for char in str4:
    if 'A' <= char <= 'Z':
        count += 1
print(count)

4.3 賦值運算: =, +=, *=

str5 = '你好'
str5 += 'hello'   # str5 = str5+'hello'
print(str5)
str5 *= 2
print(str5)

4.5 in 和 not in

  • 字符串1 in 字符串2 - 判斷字符串2中是否包含字符串1
  print('abc' in 'a123abc')    # True
  print('abc' in '123ab1c')   # False

4.6 len函數(shù)

  • len(字符串) - 獲取字符串長度(字符串中字符的個數(shù))
print(len('\tabc'))   # 4
str6 = '    abc'
print(len(str6))    # 7
print(len('\u4e00abc'))   # 4

4.7 str函數(shù)

  • str(數(shù)據(jù)) - 將其他類型數(shù)據(jù)轉(zhuǎn)換成字符串
  • 所有類型的數(shù)據(jù)都可以轉(zhuǎn)換成字符串; 轉(zhuǎn)換的時候直接數(shù)據(jù)的外面加引號
print(str(12.5))   # '12.5'
print(str(True))   # 'True'

4.8 格式字符串: 在字符串中用格式占位符代替字符串中變化的部分婿禽,然后再使用數(shù)據(jù)對變化的部分進行賦值

  • 語法: 包含格式占位符的字符串 % (數(shù)據(jù)1,數(shù)據(jù)2,...)
  • 說明: 數(shù)據(jù)的個數(shù)和類型要和前面字符串中格式占位的個數(shù)和類型保持一致
格式占位符 意義
%s 字符串
%d 整數(shù)
%.Nf 浮點數(shù)(N控制小數(shù)后小數(shù)的位數(shù))
%c 字符赏僧、字符對應(yīng)的編碼值
name = input('姓名:')
age = int(input('請輸入年齡:'))
money = 3.5
message = '我是%s, 今年%d歲, 薪資:%.1fK, 等級:%c' % (name, age, money, 66)
print(message) 

5 字符的對象方法 字符串.函數(shù)名()

5.1 字符串.capitalize() - 將字符串中的第一個字符轉(zhuǎn)換成大寫字母

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

5.2 設(shè)置對齊方式

  • 字符串.center(width, fillchar) - 讓字符串在新字符串中居中扭倾,width控制新子串的寬度淀零,fillchar是填充字符
  • 字符串.rjust(width, fillchar) - 讓字符串在新字符串中居右,width控制新子串的寬度膛壹,fillchar是填充字符
  • 字符串.ljust(width, fillchar)- 讓字符串在新字符串中居左,width控制新子串的寬度模聋,fillchar是填充字符
  • 字符串.zfill(width) <==> 字符串.rjust(width, '0')- 讓字符串在新字符串中居右肩民,width控制新子串的寬度,其余以"0"填充
str1 = 'abc'
print(str1.center(7, '*'))
print(str1.ljust(7, '%'))
print(str1.rjust(7, '='))
num = 15   
print(str(num).rjust(3, '0')) #打印一個三位數(shù)链方,num靠右對齊持痰,不夠三位用0填充,
print(str(num).zfill(3))  # 相當于rjust filling char是"0"

5.3 字符串查找和替換

str1 = 'a fox jumped over the fence'

方法名 說明 示例
str.count(sub,start=0,end=len(string)) 查找子串sub出現(xiàn)的次數(shù)祟蚀;start從指定下標開始查共啃,end結(jié)束下標 str1.count('f')
str.find(str, beg=0, end=len(string)) 從左向右檢測字符串中是否包含子字符串 str,如果包含返回下標,否則返回-1暂题。beg和end是可選參數(shù),指定查找范圍 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,可選參數(shù)count指定替換次數(shù)悬槽。 str1.replace('a','many')

5.4 字符串分隔和組合

方法名 說明 示例
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字符或非零整數(shù)屑咳,表示保留行尾標志(即換行符)
str.join(seq) 以指定字符串str作為分隔符,將seq對象中所有的元素(字符串表示)合并為一個新的字符串;seq可以是字符串弊琴、列表等

5.5 字符串判斷

方法 說明 示例
str.isalpha() 判斷字符串是否由字母構(gòu)成并且只包含字母兆龙,是返回True,否返回False str1.isalpha()
str.isalnum() 檢測字符串是否由字母和數(shù)字組成敲董,如果都是數(shù)字或字母返回True紫皇,否則返回False
str.isdigit() 檢測字符串是否由數(shù)字構(gòu)成,可檢測byte類型
str.isdecimal() 檢測字符串是否由數(shù)字構(gòu)成
str.isnumeric() 檢測字符串是否由數(shù)字構(gòu)成, 可以檢測漢字數(shù)字:十
str.isspace() 檢測字符串是否只有空格或tab構(gòu)成
str.islower() 檢測字符串中的字母字符是否全部由小寫字母組成
str.isupper() 檢測字符串中的字母字符是否全部由大寫寫字母組成
str.startswith(suffix[, start[, end]]) 用于判斷字符串是否以指定子字符串開頭腋寨,如果是則返回True聪铺,否則返回False。
str.endswith(suffix[, start[, end]]) 用于判斷字符串是否以指定子字符串 結(jié)尾精置,如果是則返回True计寇,否則返回False。

5.6 字符串轉(zhuǎn)換

方法 說明 示例
str.lower() 字符串轉(zhuǎn)小寫
str.upper() 字符串轉(zhuǎn)大寫
str.swapcase() 把字符串中的大小寫字母互換脂倦,大寫轉(zhuǎn)換成小寫番宁,小寫轉(zhuǎn)換成大寫。不去管非字母類字符赖阻。
str.capitalize() 將字符串的第一個字符轉(zhuǎn)換為大寫蝶押, 其余轉(zhuǎn)換為小寫
str.title() 字符串中每個單詞的首字母大寫,其余小寫火欧。
str1.center(width,[fillchar]) 用指定寬度居中顯示字符串棋电,如果字符串無法填滿width,將用指定字符填充字符串苇侵,默認用空格填充 str1.center(80,'*')
str.ljust(width[, fillchar]) 用指定寬度居左顯示字符串
str.rjust(width[, fillchar]) 用指定寬度居右顯示字符串
str.lstrip([chars]) 去除字符串左邊指定的字符赶盔,默認是去除空格
str.rstrip([chars]) 去除字符串左邊指定的字符,默認是去除空格
str.strip([chars]) 去除字符串兩邊邊指定的字符榆浓,默認是去除空格
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末于未,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烘浦,老刑警劉巖抖坪,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異闷叉,居然都是意外死亡擦俐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門握侧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚯瞧,“玉大人,你說我怎么就攤上這事藕咏∽粗” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵孽查,是天一觀的道長饥悴。 經(jīng)常有香客問我,道長盲再,這世上最難降的妖魔是什么西设? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮答朋,結(jié)果婚禮上贷揽,老公的妹妹穿的比我還像新娘。我一直安慰自己梦碗,他們只是感情好禽绪,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洪规,像睡著了一般印屁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上斩例,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天雄人,我揣著相機與錄音,去河邊找鬼念赶。 笑死础钠,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的叉谜。 我是一名探鬼主播旗吁,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼停局!你這毒婦竟也來了阵漏?” 一聲冷哼從身側(cè)響起驻民,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎履怯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裆泳,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡叹洲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了工禾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片运提。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闻葵,靈堂內(nèi)的尸體忽然破棺而出民泵,到底是詐尸還是另有隱情,我是刑警寧澤槽畔,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布栈妆,位于F島的核電站,受9級特大地震影響厢钧,放射性物質(zhì)發(fā)生泄漏鳞尔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一早直、第九天 我趴在偏房一處隱蔽的房頂上張望寥假。 院中可真熱鬧,春花似錦霞扬、人聲如沸糕韧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萤彩。三九已至,卻和暖如春级及,著一層夾襖步出監(jiān)牢的瞬間乒疏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工饮焦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怕吴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓县踢,卻偏偏與公主長得像转绷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子硼啤,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355