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ù)學運算符: +, *

  • 字符串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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容