字符串全集

一、 什么是字符串(str)

  • 字符串是容器型數(shù)據(jù)類型,用單引號或雙引號作為容器的標志,元素不需要用逗號隔開
  • 字符串是不可變的(不支持增刪改),字符串是有序的(支持下標操作)
  • 字符串中的元素,只能是文本符號(所有計算機能表達出來的符號),一個符號對應一個元素
  • 字符串中每個獨立的元素叫字符,python中只有字符的概念,但是沒有字符對應的數(shù)據(jù)類型
1) 空字符串和非空字符串
# 空字符串
str1 = ''
str2 =""
str3 = ''''''
str4 = """"""

#非空字符串
str11 = 'abd'
str22 ="你家"
str33 = '''hello'''
str44 = """world"""
2)字符(字符串中的元素)
  • 字符串中的字符分兩種,普通字符,轉義字符

    • 1)普通字符 : 除了轉義字符以外的所有字符
    • 2)轉義字符 : 在指定符號前加\用來表示一些特殊功能和特殊意義的字符

    \n 換行
    \t 制表符(按tab鍵)
    \' 單引號
    \" 雙引號
    \\ 反斜杠
    ?
    編碼字符:\u 加上4位的十六進制:\u4e00

str1 = '\tabc\n123'
print(str1)
str2 ='abc\'123'
print(str2)
str3 = 'acd\\n123'
print(str3)
#注意:計算字符串長度的時候,一個轉意字符串的長度是1
str5 = 'u789a'
str6 = '\u789a你好'
print (str5,str6)
  • 阻止轉義

    在字符串的最前面加r/R,那么這個字符串中所有的轉義符都無效

  str7 = r'\tqwe\nsdf\u4e00'
  print (str7)
  #應用1:windows路徑
  path = r'c\nan\temp'
  print (path)
  #應用2:正則表達式

?

二、什么是字符編碼

  • 計算機在存儲數(shù)據(jù)的時候,只能存數(shù)字,而且存的數(shù)字的補碼
  • 為了能夠讓計算機存儲文本數(shù)據(jù),給每個字符關聯(lián)了一個固定的數(shù)字,用來對這個字符進行存儲,每個字符關聯(lián)的那個數(shù)字就是這個字符的編碼值

編碼表

1)ASCII碼表 一個字節(jié)保存一個字符(碼值范圍:0~127)
  • a. 數(shù)字在字母的前面
  • b. 大寫字母在小寫字母前面(字母之間是連續(xù)遞增)
  • c. 大寫字母和小寫字母之間有其他符號
2)Unicode編碼表
  • Unicode編碼表是對ASCII碼表的擴展,Unicode編碼表包含了ASCII碼表中的符號
  • Unicode編碼表包含了世界上所有國家所有名族所有的語言的所有符號(范圍:ffff)
  • 中文范圍:4e00~9fa5
1)chr函數(shù)

chr(編碼值) 獲取指定編碼值對應的字符

print (chr(0x0f00))
for x in range(0x0f00,0x0fff):
    print (chr(x), end = ',')
count = 0
for x in range(0x4e00,0x9fa5):
    print (chr(x),end = ' ')
    count += 1
    if count%40 == 0:
        print ()

2)ord函數(shù)

ord(字符) 獲取指定字符對應的編碼值

print ()
print (ord('傻'),ord('瓜'))
3)編碼字符
str1 = '\u0f00你好!'
print (str1)

三、獲取字符串中的元素(獲取字符)


# 字符串獲取元素和列表獲取元素的語法一樣
str1 ='how are you'

# 1)獲取單個元素
print (str1[2],str1[-2])

# 2)切片
print(str1[1:3])
print(str1[-3::-1])

# 3)遍歷
for x in str1:
    print(x,end='')
print()

for index in range(len(str1)):
    print(str1[index],end='')
print()

四、字符串的其他操作

1) +,*

  • 字符串1+字符串2
  • 字符串*n
s1 = '123'
s2 = 'abc'
print(s1+s2)
print(s1*2)

2) ==,!=

print(s1 == '123')  #True
print(s1 == '321')  #False

3) >,<,>=,=<,(針對兩個字符串)

s3 = 'abcd'
s4 = 'ABC'
print(s3>s4)    #True   比較第一組不相等的字符的編碼值的大小
應用:
  • 判斷是否是數(shù)字字符:'0'<= char <='9'
  • 判斷是否是小寫字母:'a'<=char <='z'
  • 判斷是否是大寫字母:'A'<=char<='Z'
  • 判斷是否是字母: 'a'<=char <='z' or 'A'<=char<='Z'
  • 判斷是否是中文字符:'\u4e00'<= char<='\u9fa5'
舉個例子
#例1: 輸入一個字符串,統(tǒng)計字符串中字母和中文的個數(shù)
s5 = 'hello 你好嗎?'
count1 = 0
count2 = 0
for s in s5:
    if s >='\u4e00' and s<='\u9fa5':
        count1 += 1
    elif 'a'<= s <='z' or 'A'<= s <='Z':
        count2 += 1
print('中文字符個數(shù)',count1,'英文字符個數(shù)',count2)

#例2:判斷輸入的是否是純數(shù)字字符串
s6 = '12345'
for s in s6:
    if  not '0'<= s <='9':
        print('不是純數(shù)字')
        break
else:
    print('是純數(shù)字')

4) in 和 not in

字符串1 in 字符串2 判斷字符串1是否是字符串2的子串

print('abc' in 'acbwe')     #False
print('abc' in 'abcmm')     #True

五、相關函數(shù)

  • max,min,sum,sorted,reversed等,都可以使用于字符串
  • len(字符串) - 求字符串長度
  • str(數(shù)據(jù)) - 將自定義數(shù)據(jù)轉換成字符串
  • 所有的數(shù)據(jù)都能轉換成字符串
  • 將數(shù)據(jù)的打印值作為字符串的內容
  • center,rjust,ljust,zfill(居中,右對齊,左對齊)
  • 字符串.center(長度,填充字符) 產(chǎn)生一個新的字符串
  • 字符串.zfill(長度)== 字符串.rjust(長度,'0')
print('abc'.center(7,'-'))
print('abc'.rjust(7,'*'))

#舉例:給任意一個商品的數(shù)字編碼值,換成固定格式商品編碼
num = ['33','44']
str1 = 'GD'
for n in num:
    print(str1 + n.rjust(4,'0'))
  • replace

    字符串1.replace(字符串2, 字符串3) - 將字符串1中的字符串2全部替換成字符串3
    字符串1.replace(字符串2, 字符串3, N) - 將字符串1中前 N 個字符串2替換成字符串3

str1 = 'how are you? i am fine, Thank you! And you?'
print(str1.replace('you', 'me'))    # how are me? i am fine, Thank me! And me?
print(str1.replace('you', 'me', 1))   # how are me? i am fine, Thank you! And you?
  • count

    字符串1.count(字符串2) - 統(tǒng)計字符串1中字符串2出現(xiàn)的次數(shù)
    字符串1.count(字符串2, 開始下標, 結束下標) - 在字符串1中指定范圍內統(tǒng)計字符串2出現(xiàn)的次數(shù)

print(str1.count('you'))     # 3

num = str1.count('you', 0, 11)    # 1
print(num)
  • expandtabs(拋棄)

    • 字符串.expandtabs() - 將字符串中的制表符替換成 8 個空格(只針對下標是0的制表符有效,后面是 8 - 3)
    • 字符串.expandtabs(N) - 將字符串中的制表符替換成 N 個空格 (只針對下標是0的制表符有效,后面是 - 3)
str2 = 'Naa\tabc\t123'
new_str2 = str2.expandtabs(2)
print(str2, len(str2))
print(new_str2, len(new_str2))
  • 將制表符替換成8個空格
new_str2 = str2.replace('\t', ' '*8)
print(new_str2)
  • 字符串切割
    • 字符串1.split(字符串2) - 將字符串1按照字符串2為切割點進行切割
    • 字符串1.split(字符串2, N) - 將字符串1按照字符串2為切割點進行切割,切 N 次
    • 字符串1.rsplit(字符串2, N) - 將字符串1按照字符串2為切割點進行切割,切 N 次, 從后往前切
str1 = 'how are you? I am fine, Thank you! And you?'
print(str1.split(' '))   # ['how', 'are', 'you?', 'i', 'am', 'fine,', 'Thank', 'you!', 'And', 'you?']
print(str1.split(' ', 2))     # ['how', 'are', 'you? i am fine, Thank you! And you?']
print(str1.rsplit(' ', 2))    # ['how are you? i am fine, Thank you!', 'And', 'you?']
  • 刪除字符
    • 字符串1.strip() - 同時刪除字符串最左邊和最右邊的空白
    • 字符串1.lstrip() - 刪除字符串中最左邊的所有空白
    • 字符串1.rstrip() - 刪除字符串中最右邊的所有空白
    • 字符串1.strip(字符串2) - 同時刪除字符串最左邊和最右邊的字符串2
    • 字符串1.lstrip(字符串2) - 刪除字符串中最左邊的所有字符串2
    • 字符串1.rstrip(字符串2) - 刪除字符串中最右邊的所有字符串2
str3 = '\n\t abc 123\n 你好  \n'
print('============================')
print(str3)
print('============================')
print(str3.lstrip())
print('============================')
print(str3.rstrip())
print('============================')
print(str3.strip())
print('============================')

str4 = '**1**abc123***'
print(str4.strip('*'))    # 1**abc123
print(str4.rstrip('*'))   # **1**abc123
print(str4.lstrip('*'))   # 1**abc123***
  • 字符串查找
    • 字符串1.find(字符串2) - 獲取字符串2第一次在字符串1中出現(xiàn)的位置(用正的下標值表示),如果找不到返回 -1
    • 字符串1.find(字符串2, 開始下標, 結束下標)
str1 = 'how are you? i am fine, Thank you! And you?'
print(str1.find('you'))    # 8

# 練習1:寫代碼實現(xiàn)查找字符串str1中所有的 'you'出現(xiàn)的位置
start_index = 0
indexs = []
while True:
    index = str1.find('you', start_index)
    if index == -1:
        break
    start_index = index + 3
    indexs.append(index)
print(indexs)
  • 拼接

    字符串.join(容器) - 將容器中元素用指定字符串連接在一起(容器中的元素是字符串)

  list1 = ['路路', '浩浩', '榮榮']
  new_str = ' and '.join(list1)
  print(new_str)

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

  # 練習2:用列表推導式實現(xiàn)將任意容器中的元素用join進行連接
  nums = [10, 20, '30', True]
  # print('+'.join(nums))   # TypeError: sequence item 0: expected str instance, int found

  nums = {'name': '晴晴', 'age': 18, 'sex': '女'}
  new_str3 = ' '.join([str(x) for x in nums.values()])
  print(new_str3)    #晴晴 18 女
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容