python字符串

一、字符串和字符

1.什么是字符串(str)

字符串是容器型數(shù)據(jù)類型, 將''/""/''''''/""""""作為容器標(biāo)志职抡,容器中的元素全是字符

不可變的(不支持增刪改)葬燎、有序(支持下標(biāo)操作)

str1 = 'hello\n123'
str2 = "你好"
str3 = '''thanks
123
456'''
str4 = """謝謝"""
print(type(str1), type(str2), type(str3), type(str4))
print(str1)
print(str3)

2.字符串中的元素 - 字符

python中只有字符的概念,沒(méi)有對(duì)應(yīng)的數(shù)據(jù)類型缚甩。引號(hào)中只有一個(gè)元素的字符串可以看成一個(gè)字符

字符串又叫字符集

1)字符串中的字符 - 原則上任何可以通過(guò)鍵盤輸入或者從其他地方賦值粘貼的所有的符號(hào)都可以作為字符

'和健身房'萨蚕、'shuASSS'、'2378'蹄胰、'+-===岳遥!@&*#@'、'?'

a.普通字符: 在字符串中能夠代表符號(hào)本身的字符(沒(méi)有特殊意義和特殊功能的符號(hào))

b.轉(zhuǎn)義字符: 在字符串中有特殊意義和特殊功能的符號(hào)的組合裕寨,一般是以\開(kāi)頭的

\n - 換行
\' - 表示'本身
\" - 表示"本身
\t - 表示一個(gè)縮進(jìn)(tab鍵)
\\ - 表示一個(gè)\

注意: 所有的轉(zhuǎn)義字符的長(zhǎng)度都是1

c.編碼字符

\u四位的16進(jìn)制數(shù) - 編碼字符(獲取4位16進(jìn)制數(shù)作為編碼值對(duì)應(yīng)的字符)

2)阻止轉(zhuǎn)義: 在字符串的最前面加r/R可以讓當(dāng)前字符串中所有的轉(zhuǎn)義字符失效(所有的符號(hào)在字符串中都表示這個(gè)符號(hào)本身)

str1 = 'abc\n123'
print(str1)

str2 = 'abc\'1\"23'
print(str2)

str3 = '\tabc'
print(str3)

str4 = 'abc\\n123'
print(str4)

str5 = 'abc\u4eff'
print(str5)

str6 = R'\tabc\n\'123'
print(str6)

3.字符編碼

計(jì)算機(jī)不能直接存儲(chǔ)字符(符號(hào))浩蓉,只能存儲(chǔ)數(shù)字;

為了能夠存儲(chǔ)字符,把每一個(gè)字符關(guān)聯(lián)了一個(gè)固定的數(shù)字(這個(gè)固定的數(shù)字就是對(duì)應(yīng)的字符的編碼)

字符和數(shù)字和一一對(duì)應(yīng)關(guān)系就是編碼表:ASCII碼表,Unicode編碼表(python)

1) ASCII碼表 - 在計(jì)算機(jī)中采用一個(gè)字節(jié)保存一個(gè)字符(總共128個(gè)字符)宾袜, 字符包含了所有的字母捻艳、數(shù)字和美國(guó)常用符號(hào)

0 ~ 9: 編碼值從48開(kāi)始依次增加
大寫字母的編碼值 < 小寫字母的編碼值
大寫字母和小寫字母不是緊挨著的

2) Unicode編碼表是ASCII碼表的擴(kuò)展, 包含了世界上所有的國(guó)家、所有的語(yǔ)言對(duì)應(yīng)的符號(hào)(總共有65536個(gè)符號(hào))

ASCII碼: 0 ~ 127
中文編碼值范圍: 0x4e00 ~ 0x9fa5

(1)編碼字符: \u4位16進(jìn)制編碼值

str1 = 'abc\u50ff'
print(str1)

(2)chr(編碼值) - 獲取編碼值對(duì)應(yīng)的字符

print(chr(97))

num = 0
for x in range(0x4e00, 0x9fa5+1):
    print(chr(x), end=' ')
    num += 1
    if num % 30 == 0:
        print()

print()
for x in range(0x0F00, 0x0FFF+1):
    print(chr(x), end=' ')

print()

for x in range(0x2400, 0x243F+1):
    print(chr(x), end=' ')

print()

(3)ord(字符) - 獲取指定字符對(duì)應(yīng)的編碼值

print(hex(ord('李')))
print(hex(ord('四')))

二庆猫、字符串操作

1.查 - 獲取字符 (和列表獲取元素的方式一樣)

1)獲取單個(gè)字符: 字符串[下標(biāo)]

2)切片: 字符串[開(kāi)始下標(biāo):結(jié)束下標(biāo):步長(zhǎng)]

3)遍歷: 直接變量元素认轨、通過(guò)下標(biāo)遍歷

注意: 一個(gè)空格是一個(gè)字符; 按tab鍵是4個(gè)空格,對(duì)應(yīng)4個(gè)字符; \t對(duì)應(yīng)一個(gè)字符

獲取單個(gè)字符

str1 = '\thello Python!'
print(str1[-2])    # n
print(str1[2])     # e
# print(str1[100])   # IndexError: string index out of range

切片

print(str1[2:])     # ello Python!
print(str1[1:-1:2])  # hloPto
print(str1[:3:-1])   # !nohtyP ol

遍歷

for x in str1:
    print('x:', x)
"""
for 下標(biāo),元素 in enumerate(序列):
    循環(huán)體
"""
for index, item in enumerate(str1):
    print(index, item)

2. 相關(guān)操作

1)運(yùn)算符:

a. +, *

str1 = 'abc'
str2 = '123'
print(str1 + " " + str2)   # abc 123
print(str1 * 3)   # abcabcabc

b. ==, !=

print('abc' == 'abc')   # True
print('abc' == 'acb')   # False

>, <, >=, <=

字符串1 > 字符串2

字符串比較大小比較的是字符串編碼值的大小

"""
判斷字符是否是小寫字母: 'a'<= char <= 'z'
判斷字符是否是大寫字母: 'A'<= char <= 'Z'
判斷字符是否是字母: 'A' <= char <= 'Z' or 'a'<= char <= 'z'
判斷字符是否是中文: '\u4e00' <= char <= '\u9fa5'
判斷字符是否是數(shù)字: '0' <= char <= '9'
"""
print('abcdef' > 'bc')   # False
print('Z' < 'a')    # True
print('abaaaa' < 'aczzzzzz')   # True

char = input('請(qǐng)輸入一個(gè)字符:')
if '\u4e00' <= char <= '\u9fa5':
    print(char, '是中文')
else:
    print(char, '不是中文')

練習(xí): 輸入一個(gè)字符串月培,判斷這個(gè)字符串是否是中文字符串(全是中文)

value = input('請(qǐng)輸入:')
for char in value:
    if not '\u4e00' <= char <= '\u9fa5':
        print('非中文字符串')
        break
else:
    print('是中文字符串')

2) in / not in

字符串1 in 字符串2 -> 判斷字符串2中是否包含字符串1

str3 = 'abc 123'
print('b' in str3)   # True  10 in [10, 20, 30]
print('abc' in str3)  # True  [10, 20] in [10, 20, 30]  -> False
print('ac' in str3)   # False

3)相關(guān)函數(shù): len, str, sorted, reversed

a.len(字符串)

print(len('\tabc\n123\u4eee'))    # 9
print(len(' abc123'))       # 7
print(len(' '))      # ' ' -> 1; '' -> 0

b.str(數(shù)據(jù)) - 所有數(shù)據(jù)都可以轉(zhuǎn)換成字符串; 直接將數(shù)據(jù)的打印值加引號(hào)

a = 100
str(a)          # '100'
str(True)       # 'True'
list1 = [10, 20, 30]
str4 = str(list1)     # '[10, 20, 30]'
print(len(str4), str4[0])     # 12  [

c.sorted(字符串)

str5 = 'pythonH12QWz'
list2 = sorted(str5)
print(list2)   # ['1', '2', 'H', 'Q', 'W', 'h', 'n', 'o', 'p', 't', 'y', 'z']
print(''.join(list2))   # 12HQWhnoptyz

三嘁字、格式化字符串

1.格式占位符

"""
a.語(yǔ)法: 包含格式占位符的字符串 % (值1, 值2, 值3,...)  
b.說(shuō)明:
格式占位符 - 格式占位符有哪些是固定,使用的時(shí)候和字符串中變化的數(shù)據(jù)的類型相關(guān)
           %s  - 字符串(任何類型都可以使用%s占位)
           %d  - 整數(shù); 
           %-Nd - 整數(shù); N約束數(shù)字最后的長(zhǎng)度杉畜,如果不夠后面補(bǔ)空格
           %Nd  - 整數(shù); N約束數(shù)字最后的長(zhǎng)度纪蜒,如果不夠前面補(bǔ)空格
           %f   - 浮點(diǎn)數(shù);小數(shù)點(diǎn)后面保留6位小數(shù)
           %.Nf - 浮點(diǎn)數(shù), N約束小數(shù)點(diǎn)N后的小數(shù)位數(shù)(會(huì)四舍五入)
           %c   - 字符
% - 固定寫法
() - 固定寫法;如果值的個(gè)數(shù)是1可以省略
值 - 任何有結(jié)果的表達(dá)式; 值的個(gè)數(shù)和類型和前面占位符的個(gè)數(shù)以及類型保持一致
"""
# name = input('請(qǐng)輸入姓名:')
name = '張三'
# age = int(input('請(qǐng)輸入年齡:'))
age = 20
# 你好此叠,我是xxx纯续,今年x歲
# 方法一:
print('你好,我是'+name+',今年'+str(age)+'歲')
print('你好猬错,我是%s窗看,今年%4d歲, 工資:%.2f, %s, %f, %c, %c' % (name, age, 3.1495926, 2.348, 1.25, 'Z', 97))

2.format

一個(gè)帶有{}的字符串.format(值1, 值2, 值3,...)

用法1: 讓空的{}個(gè)數(shù)和format中值的個(gè)數(shù)保持

print('我是{}, 今年{}歲'.format('余婷', 18))

用法2: {N} - N從0開(kāi)始依次增加,分別表示format中第0個(gè)值倦炒,第1個(gè)值,...

print('我是{0},年是:{1}, 今年{1}歲'.format('余婷', 18))
print('數(shù)據(jù)1:{1}, 數(shù)據(jù)2:{0}, 數(shù)據(jù)3:{1}'.format(10, 20))   # 數(shù)據(jù)1:20, 數(shù)據(jù)2:10, 數(shù)據(jù)3:20

用法3: [key]

'{key1}, {key2}'.format(key1=值1, key2=值2) -> '值1, 值2'

print('我是{name},年齡是:{age}, 今年{age}歲'.format(age=20, name='張三'))

用法4: 用列表元素給占位符賦值(了解)

list1 = [10, 20, 30, 40]
print('{0[1]},{0[0]},{0[3]}'.format(list1))
print('{1[0]}, {1[1]}, {1[1]}, {0}'.format('張三', list1))
print('{list[1]},{list[2]},{list[3]}'.format(name='張三', list=list1))

用法5: 用字典的值給占位符賦值(了解)

student = {'name': '小明', 'age': 20, 'id': '001', 'score': 100}
print('{name}今年{age}歲显沈,學(xué)號(hào):{id}, 考了{(lán)score}'.format(**student))
# format(**student) --> format(name='小明', age=20, id='001', score=100)

其他的寫法:

約束小數(shù)位數(shù)

print('圓周率:{:.2f}'.format(3.1415926))   # 約束小數(shù)位數(shù)

約束整數(shù)寬度

print('整數(shù):{:0>4d}。'.format(25))    # 整數(shù):0025
print('整數(shù):{:0<4d}析校。'.format(25))    # 整數(shù):2500。
print('整數(shù):{:+>4d}铜涉。'.format(25))    # 整數(shù):++25智玻。

分隔

print('大的整數(shù):{:,}'.format(100000000))   # 大的整數(shù):100,000,000

百分比

print('百分比:{:.2%}'.format(0.25))   # 百分比:25.00%

四、字符串相關(guān)方法

1.字符串.capitalize() - 將字符串的首字母變成大寫字母

str1 = 'python'
new_str1 = str1.capitalize()
print(new_str1)

# 97 - 65  == 32; 98-66 == 32
char = 'j'
print(chr(ord(char)-32))

2.center/ljust/rjust/zfill

"""
字符串.center(寬度, 填充字符)   # xabcx
字符串.ljust(寬度, 填充字符)    # abcxx
字符串.rjust(寬度, 填充字符)    # xxabc
字符串.zfill(寬度) == 字符串.rjust(寬度, '0') 
"""
print('abc'.center(7, '+'))   # ++abc++
print('abc'.ljust(7, '+'))    # abc++++
print('abc'.rjust(7, '+'))    # ++++abc
print('abc'.zfill(7))         # 0000abc
# 001芙代, 004吊奢, 009, 023纹烹, 045页滚, 102
num = 21
print(str(num).zfill(3))

3.

字符串1.count(字符串2) -> 統(tǒng)計(jì)字符串1中字符串2出現(xiàn)的次數(shù)

字符串1.count(字符串2,開(kāi)始下標(biāo),結(jié)束下標(biāo)) - 統(tǒng)計(jì)字符串1開(kāi)始下標(biāo)到結(jié)束下標(biāo)范圍內(nèi)字符串2出現(xiàn)的次數(shù)

str2 = 'how are you? i am fine! thank you!'
print(str2.count('you'))   # 2
print(str2.count('a'))     # 3

print(str2.count('you', 0, 15))   # 1
print(str2.count('you', 0, 4))    # 0

4.

str1 = 'you'
str2 = 'how are you'
# 判斷str2是否以str1結(jié)尾
print(str2[-len(str1):] == str1)

5.字符串查找

"""
字符串1.find(字符串2) - 獲取字符串2第一次在字符串1出現(xiàn)的位置(用大于等于0的下標(biāo)值表示);
                      字符串2不存在結(jié)果是-1
字符串1.index(字符串2) - 獲取字符串2第一次在字符串1出現(xiàn)的位置(用大于等于0的下標(biāo)值表示);
                       字符串2不存在會(huì)報(bào)錯(cuò)
"""
str2 = 'how are you? i am fine! thank you!'
print(str2.index('you'))   # 8
print(str2.find('you123'))    # 8
print(str2.find('you123'))   # -1
# print(str2.index('you123'))  # ValueError: substring not found

6.join

"""
字符串.join(序列)  - 將序列中的元素用字符串連接在一起產(chǎn)生一個(gè)新的字符串铺呵;
                   序列中的元素是字符串
"""
str3 = '+'.join('abc')
print(str3)    # a+b+c

str4 = ''.join(['name', 'age', 'gender'])
print(str4)

str5 = ''.join({'a': 1, 'b': 1})
print(str5)    # ab

7.字符串替換

"""
1) 字符串1.replace(字符串2, 字符串3)   -> 將字符串1中所有的字符串2都替換成字符串3
2) 
字符串1.maketrans(字符串2,字符串3)  -> 創(chuàng)建字符串2和字符串3一一對(duì)應(yīng)的映射表
字符串1.translate(替換的映射表) 
"""
str2 = 'how are you? i am fine! thank you!'
new_str2 = str2.replace('you', 'me')
print(new_str2)   # how are me? i am fine! thank me!

# 創(chuàng)建映射表
table = str.maketrans('a!', 'b+')
new_str2 = str2.translate(table)   # 將字符串str2中所有的a都替換成b, 所有的!都替換成+
print(new_str2)

8.字符串切割

"""
字符串1.split(字符串2)  -  將字符串1中所有的字符串2作為切割點(diǎn)切成多分
"""
str2 = 'how are you? i am fine! thank you!'
print(str2.split(' '))  # ['how', 'are', 'you?', 'i', 'am', 'fine!', 'thank', 'you!']
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末裹驰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子片挂,更是在濱河造成了極大的恐慌幻林,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件音念,死亡現(xiàn)場(chǎng)離奇詭異沪饺,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)闷愤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門整葡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人讥脐,你說(shuō)我怎么就攤上這事遭居。” “怎么了旬渠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵魏滚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我坟漱,道長(zhǎng)鼠次,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮腥寇,結(jié)果婚禮上成翩,老公的妹妹穿的比我還像新娘。我一直安慰自己赦役,他們只是感情好麻敌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著掂摔,像睡著了一般术羔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乙漓,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天级历,我揣著相機(jī)與錄音,去河邊找鬼叭披。 笑死寥殖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涩蜘。 我是一名探鬼主播嚼贡,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼同诫!你這毒婦竟也來(lái)了粤策?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤误窖,失蹤者是張志新(化名)和其女友劉穎掐场,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贩猎,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熊户,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吭服。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚷堡。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖艇棕,靈堂內(nèi)的尸體忽然破棺而出蝌戒,到底是詐尸還是另有隱情,我是刑警寧澤沼琉,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布北苟,位于F島的核電站,受9級(jí)特大地震影響打瘪,放射性物質(zhì)發(fā)生泄漏友鼻。R本人自食惡果不足惜傻昙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望彩扔。 院中可真熱鬧妆档,春花似錦、人聲如沸虫碉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)敦捧。三九已至须板,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兢卵,已是汗流浹背习瑰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留济蝉,地道東北人杰刽。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓菠发,卻偏偏與公主長(zhǎng)得像王滤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滓鸠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 1.什么是字符串 序列雁乡,有序,不可變的糜俗。用單引號(hào)或者雙引號(hào)括起來(lái)的任意字符集踱稍。 2.字符串中的字符 a.普通字符:...
    發(fā)家致富靠養(yǎng)豬閱讀 625評(píng)論 1 7
  • 1.什么是字符串序列,有序悠抹,不可變的用單引號(hào)或者雙引號(hào)任意字符集珠月, 2,字符串中的字符普通字符:'23', 'sd...
    嘩啦噼里啪啦閱讀 410評(píng)論 0 0
  • 一楔敌、字符串和字符 1.什么是字符串(str) 字符串是容器型數(shù)據(jù)類型, 將''/""/''''''/""""""作...
    窮到?jīng)]有姓名閱讀 155評(píng)論 0 0
  • 結(jié)束了五一小假啤挎,我踏上了回校的路 ,在廣州這個(gè)地鐵發(fā)達(dá)的城市卵凑,無(wú)論去哪里幾乎都會(huì)選擇地鐵庆聘,像往常那樣戴著耳機(jī)聽(tīng)著民...
    阿仙w閱讀 106評(píng)論 0 0
  • 起床了……1分鐘.5分鐘……30分鐘過(guò)去了……還是在賴床…嘻嘻伙判! 我們常常在自己的腦子里設(shè)定一些規(guī)定,以為...
    媛芒果閱讀 1,047評(píng)論 0 1