Python3.7之字符串


Python3.7之字符串

一、基礎知識

在python中,加了引號的字符均被認為是字符串。單雙引號沒有任何區別,但要考慮字符串內含有引號的配合情況,多行字符串必須用多引號。

二、字符串常用函數

1.合並字符串之join()與format()

join():用於將序列中的元素以指定的字符連接生成一個新的字符串。

l = ['a','a','a','a']
L1 = ''.join(l)   # output is 'aaaa'
L2 = 'b'.join(l)  # output is 'abababa'
L3 = '5'.join(l)  # output is 'a5a5a5a'

format():Python2.6 開始,新增了一種格式化字符串的函數 str.format(),它增強了字符串格式化的功能。

基本語法是通過 {}: 來代替以前的 % 。format 函數可以接受不限個參數,位置可以不按順序。

# 形式一
print('{0}{1}{0}'.format('a', 'b'))
# 形式二,必須一一對應
print('{}{}'.format('a', 'b'))
# 形式三
print('{name}的年齡是{age}'.format(age=12, name='謝欣然'))
'''
aba
ab
謝欣然的年齡是12
'''

2. strip()與split()辨析

strip是刪除的意思,而split則是分割的意思,兩者功能不同。

strip():取掉字符兩端字符(默認是空格,當然也可以以自定義字符放到括弧里),所以就有rstrip(),lstrip(),意思是去掉右邊、去掉左邊。

注意:該方法只能刪除開頭或是結尾的字符,不能刪除中間部分的字符。

l = '222hello22222222'
l.strip('2')   # output is 'hello'
l.rstrip('2')  # output is 222hello
l.lstrip('2')  # output is hello2222222

只要頭尾包含有指定字符序列中的字符就刪除

str = "123abcrunoob321"
print (str.strip( '12' ))  # 字符序列為 12
'''
3abcrunoob3
'''

split():通過指定分隔符對字符串進行切片,分割成列表,如果參數 num 有指定值,則分隔 num+1 個子字符串。分隔符默認為空字符,包括空格,換行符,制表符,num默認為-1。

str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
print(str.split())       # 以空格為分隔符,包含 \n
print(str.split(' ', 1))  # 以空格為分隔符,分隔成兩個
'''
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']
'''

3. find()與index()辨析

s.index(x):返回字符串s中出現x的最左端的索引值,如果不在則拋出ValueError異常(報錯)

s.find(x) :返回字符串s中出現x的最左端字符的索引值,如果不在則返回-1

均為找到x即返回,不進行后面的二次判斷。

s = 'Hello, how are you?'
print(s.find('o'))
print(s.index('o'))
print(s.find('i'))
'''
4
4
-1
'''
print(s.index('i'))
'''
ValueError: substring not found
'''

4.切片

格式: [starts: end: step]

• [:] 提取從開頭(默認位置0)到結尾(默認位置-1)的整個字符串
• [start:] 從start 提取到結尾
• [:end] 從開頭提取到end - 1
• [start: end] 從start 提取到end - 1
• [start: end: step] 從start 提取到end - 1,每step 個字符提取一個
• 左側第一個字符的位置/偏移量為0,右側最后一個字符的位置/偏移量為-1

注意:字符串倒轉

s = 'Hello, how are you?'
print(s[::-1])
'''
?uoy era woh ,olleH
'''

5.其他函數

capitalize(): 首字母變大寫

center(width[, fillchar]): 原來字符居中,不夠用字符串補全(默認字符)

count(sub[, start[, end]]): 從一個范圍內統計某str出現的次數

s = 'hello, how are you?'
print(s.capitalize())
print(s.center(50, '*'))
print(s.count('o', 0, len(s)))

三、關於字符串拼接的方法總結

1.+

str1 = 'hello '
str2 = 'world'
print(str1+str2)

因為字符串為不可變數據類型,則拼接后的新字符串會獨占一塊新的內存。

拓展:在拼接短的字面值時,由於CPython中的 常數折疊 (constant folding)功能,這些字面值會被轉換成更短的形式,例如'a'+'b'+'c' 被轉換成'abc','hello'+'world'也會被轉換成'hello world'。這種轉換是在編譯期完成的,而到了運行期時就不會再發生任何拼接操作,因此會加快整體計算的速度。

常數折疊優化有一個限度,它要求拼接結果的長度不超過20。所以,當拼接的最終字符串長度不超過20時,+號操作符的方式,會比后面提到的join等方式快得多,這與+號的使用次數無關。

2.(格式化字符串)%

print('%s %s' % ('hello', 'world'))

3.join()

用於將序列中的元素以指定的字符連接生成一個新的字符串。

l = ['a','a','a','a']
L1 = ''.join(l)   # output is 'aaaa'
L2 = 'b'.join(l)  # output is 'abababa'
L3 = '5'.join(l)  # output is 'a5a5a5a'

4.format()

Python2.6 開始,新增了一種格式化字符串的函數 str.format(),它增強了字符串格式化的功能。

基本語法是通過 {}: 來代替以前的 % 。format 函數可以接受不限個參數,位置可以不按順序。

# 形式一
print('{0}{1}{0}'.format('a', 'b'))
# 形式二,必須一一對應
print('{}{}'.format('a', 'b'))
# 形式三
print('{name}的年齡是{age}'.format(age=12, name='謝欣然'))
'''
aba
ab
謝欣然的年齡是12
'''

5.f-string

f-string方式出自PEP 498(Literal String Interpolation,字面字符串插值),從Python3.6版本引入。其特點是在字符串前加 f 標識,字符串中間則用花括號{}包裹其它字符串變量。

這種方式在可讀性上秒殺format()方式,處理長字符串的拼接時,速度與join()方法相當。

name = 'world'
my_name = '謝欣然'
print(f'Hello {name}, my name is {my_name}.')
# hello world, my name is 謝欣然.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM