python基礎——字符串(str)
標準序列的常規操作(索引、切片、乘法、成員資格檢查、長度等)適用於字符串,但字符串是不可變的數據類型,因此元素賦值和切片賦值是非法的。
這裏介紹字符串兩個方面:字符串格式設置 字符串方法
1、設置字符串格式(format):基礎版
使用字符串格式設置運算符----%,並在%右邊指定格式的值。指定要設置其格式的值時,可使用單個值(如字符串,數字等)
,亦可使用元組(設置多個值)或者字典。
%c | 格式化字符及其ASCII碼 | %f | 格式化浮點數字,可指定小數點後的精度 |
%s | 格式化字符串 | %e | 用科學計數法格式化浮點數 |
%d | 格式化整數 | %E | 作用同%e,用科學計數法格式化浮點數 |
%u | 格式化無符號整型 | %g | %f和%e的簡寫 |
%o | 格式化無符號八進制數 | %G | %f 和 %E 的簡寫 |
%x | 格式化無符號十六進制數 | %p | 用十六進制數格式化變量的地址 |
%X | 格式化無符號十六進制數(大寫) |
>>> format = ‘hello, %s and %s !‘ # %s稱為轉換說明符,指出值要插入的位置,s指的將值視為字符串進行格式設置
>>> name = (‘zhao‘, ‘kong‘)
>>> format % name
‘hello, zhao and kong !‘
另一種解決方案‘format’
(1)替換字段沒有名稱或將索引用作名稱
>>> ‘{}, {}, {}‘.format(‘first‘, ‘second‘, ‘third‘)
‘first, second, third‘
>>> ‘{2}, {1}, {0}‘.format(‘first‘, ‘second‘, ‘third‘)
‘third, second, first‘
(2)命名字段
>>> from math import pi
>>> ‘{name} is approximately {value:.3f}‘.format(name = ‘pi‘,value = pi)
# 使用格式說明符‘.3f‘,並使用冒號將其與字段隔開,意味著要使用包含3位小數的浮點數格式
‘pi is approximately 3.142‘
2、 設置字符串的格式:完整版
格式字符串中,替換字段由如下部分組成,其中每部分都是可選的。
- 字段名:索引或標識符,指出要設置哪個值的格式並使用結果來替換該字段。除指定值外,還可以指定值的特定部分,如列表的元素
- 轉換標誌:跟在嘆號後面的單個字符。當前支持的字符包括r(repr)、s(str)、a(ascii)。如果你指定了轉換標誌,將不使用對象本身的格式設置機制,而是使用指定的函數將對象轉換成字符串,在做進一步的格式設置。
- 格式說明符:跟在冒號後面的表達式,格式說明符讓我們能夠詳細的指定最終格式,包括格式類型(如字符串、整數、浮點數等),字段的寬度和數字的精度,如何顯示符號和千分位分隔符,以及各種對齊和填充方式
2.1替換字段名
按順序和參數配對
>>> ‘{first} {} {third} {}‘.format(2,4,first=1,third=3) # 位置參數在前,按順序指定給未命名字段,然後按命名參數指定命名字段
‘1 2 3 4‘
也可使用索引值和命名參數指定
>>> ‘{first} {1} {third} {0}‘.format(2,4,first=1,third=3)
‘1 4 3 2‘
不能同時使用手工編號和自動編號
>>> ‘{first} {1} {third} {}‘.format(2,4,first=1,third=3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: cannot switch from manual field specification to automatic field numbering
2.2 基本轉換
指定在字段中包含的值以後就可以設置其格式的指令了。
>>> ‘the number is {num:f}‘.format(num=100)
‘the number is 100.000000‘
>>> ‘the number is {num:b}‘.format(num=100)
‘the number is 1100100‘
2.3寬度、精度和千分位
在格式說明中指定寬度和精度
寬度是使用整數指定的如下所示:
>>> ‘{num:10}‘.format(num=1)
‘ 1‘
>>> ‘{name:10}‘.format(name=‘zhao‘)
‘zhao ‘
精度也是由整數指定,但需要在之前加上一個表示小數點的句點
>>> ‘{π:10.5f}‘.format(π=pi)
‘ 3.14159‘
使用逗號指出需要添加的千位分隔符
>>> ‘{:,}‘.format(1000000)
‘1,000,000‘
2.4符號、對齊、填充
填充
用0填充
>>> ‘{0:0^15}‘.format(‘zhao‘)
‘00000zhao000000‘
其他符號填充
>>> ‘{:*^10}‘.format(‘zhao‘)
‘***zhao***‘
對齊
可以使用 <、>和^,指定左對齊、右對齊、居中
>>> print(‘{:<10}\n{:^10}\n{:>10}‘.format(‘zhao‘,‘qian‘,‘sun‘))
zhao
qian
sun
3.4 字符串常用方法
center()== 》S.center(width[, fillchar]) -> str
方法center通過在兩邊添加填充字符(默認空格)讓字符串居中
>>> ‘zhao‘.center(10, ‘*‘)
‘***zhao***‘
>>> ‘zhao‘.center(10)
‘ zhao ‘
find() == 》S.find(sub[, start[, end]]) -> int
方法find()在字符串中查找子串,如果找到就返回子串第一個字符的索引,否則返回 -1
>>> ‘zhao‘.find(‘a‘)
2
>>> ‘zhao‘.find(‘ao‘)
2
還可指定搜索的起點和終點
>>> ‘zhaoqianzhao‘.find(‘zhao‘,1)
8
>>> ‘zhaoqian‘.find(‘a‘,3,8) #包含起點不包含終點
6
john() ==》 S.join(iterable) -> str
John方法是非常重要的字符串方法,其作用與split()相反,用於合並序列的元素
>>> l1 = [‘zhao‘,‘qian‘,‘sun‘]
>>> ‘.‘ . join(l1)
‘zhao.qian.sun‘
lower() == 》S.lower() -> str
返回字符串的小寫版本
>>> ‘ZHAO‘.lower()
‘zhao‘
replace() == 》 S.replace(old, new[, count]) -> str
>>> ‘zhao‘.replace(‘zhao‘,‘qian‘)
‘qian‘
>>> ‘zhaozhaozhao‘.replace(‘zhao‘,‘qian‘,2)
‘qianqianzhao‘
split() == 》S.split(sep=None, maxsplit=-1) -> list of strings
split()方法與Join()方法相反,用於將字符串轉換序列
>>> ‘z h a o‘.split()
[‘z‘, ‘h‘, ‘a‘, ‘o‘]
>>> ‘z!h!a!o‘.split(‘!‘)
[‘z‘, ‘h‘, ‘a‘, ‘o‘]
strip() == 》S.strip([chars]) -> str
strip()方法將字符串開頭和結尾的空白刪除,並返回刪除後的結果
>>> ‘zhao ‘.strip()
‘zhao‘
translate() == 》S.translate(table) -> str
translate()與replace ()一樣替換字符串的特定部分,但不同的是它只能進行含有單字符替換,優勢在於可以同時替換多個字符,因此比replace()效率高
使用translate()需要先創建一個轉換表,可對字符串調用maketrans,這個方法接受兩個參數:兩個相同長度的字符串,指定要將第一個字符串中的每個字符都替換為第二個字符串中相應字符
>>> table = str.maketrans(‘cs‘,‘kz‘)
>>> table
{99: 107, 115: 122}
>>> ‘this is cool‘.translate(table)
‘thiz iz kool‘
調用maketrans()方法時,還可以提供第三個可選參數,指定要將那些字母刪除
>>> table = str.maketrans(‘cs‘,‘kz‘,‘o‘)
>>> ‘this is cool‘.translate(table)
‘thiz iz kl‘
判斷字符串是否滿足特定條件
很多字符串方法以is開頭,他們判斷字符串是否具有特定性質,這些方法返回False 或 True
python基礎——字符串(str)