《Python基礎(chǔ)教程》第3章 字符串操作

字符串也是元組的一種匿辩,本章會(huì)介紹:字符串的格式化、分割源请、聯(lián)接枪芒、搜索。

基本字符串操作

所有標(biāo)準(zhǔn)的序列操作對(duì)字符串同樣適用谁尸,唯一要記得的是字符串是不可變的舅踪,如下的操作是不合法的:

website = 'http://python.org'
website[-3:] = 'com' //TypeError

字符串格式化:精簡(jiǎn)版

>>> format = "hello, %s"
>>> values  =('world')
>>> format % values
'hello, world'

>>> format = "Pi with three decimals: %.3f"
>>>from math import pi
>>>print format % pi
Pi with three decimals: 3.142

字符串是很多編程語言中都會(huì)頻繁被使用到的,該部分只是簡(jiǎn)單介紹字符串的格式化良蛮,在下一節(jié)會(huì)有詳細(xì)的說明抽碌。

如上,%為字符串格式化操作符决瞳,操作符的左邊是希望格式化的字符串货徙,右邊是格式化的值。上例中用于格式化的值是一個(gè)元組皮胡,用其他的會(huì)有什么樣的結(jié)果屬于下一章的討論范疇痴颊。

%s是期望接受字符串,%.3f期望接受小數(shù)點(diǎn)后有三位的浮點(diǎn)數(shù)屡贺。

字符串格式化:完整版

格式化操作符%右邊可以是任何東西蠢棱,當(dāng)右邊是元組和字典(尚未介紹)的時(shí)候結(jié)果會(huì)有不同。本章只介紹右邊是元組的情況甩栈。右操作數(shù)是元組的時(shí)候裳扯,每個(gè)元素都會(huì)被單獨(dú)格式化,每個(gè)元組中的值都要對(duì)應(yīng)一個(gè)做操作數(shù)中的字符轉(zhuǎn)換說明符谤职。

轉(zhuǎn)換說明符包含以下部分:
(1)%:轉(zhuǎn)換說明符的開始
(2)轉(zhuǎn)換標(biāo)識(shí)(可選): -/+/' '/0
(3)最小字段寬度
(4)(.):后跟精度值
(5)轉(zhuǎn)換類型:......

簡(jiǎn)單轉(zhuǎn)換

如下是幾個(gè)練習(xí)饰豺,可以嘗試下,在下方有答案:

練習(xí)1 'Price of eggs: $42'
練習(xí)2 'Hexidecimal price of eggs: 2a'
練習(xí)3 'Pi: 3.141593......'
練習(xí)4 'Very inexact estimate of Pi: 3'
練習(xí)5 'Using str:42'
練習(xí)5 'Using repr:42L'

答案1
>>> 'Price of eggs: $%d' % 42
答案2
>>> 'Price of eggs: %x' % 42
答案3
>>> from math import pi
>>> 'Pi: %f......' % pi
答案4
>>> from math import pi
>>> 'Very inexact estimate of Pi: %i' % pi
答案5
>>> 'Using str: %s' % 42L
答案6
>>> 'Using repr: %s' % repr(42L) 或 'Using repr: %r' % 42L

字段寬度和精度
>>> '%10.2f'%pi
'      3.14' #字段寬為10允蜈,精度為2
>>> '%10f'%pi
'  3.141593' #字段寬為10
>>> '%.*s' % (5,'Gui Vanchi')
'Gui V' #使用*會(huì)從右操作數(shù)中去讀取參數(shù)
符號(hào)冤吨、對(duì)齊和0填充
>>> '%010.2f'%pi
'0000003.14' #在字符寬度前加0會(huì)將結(jié)果前面的空格用0填充
>>> '%-10.2f'%pi
'3.14    ' #加-號(hào)會(huì)使結(jié)果左對(duì)齊
>>> print('% 5d' % 10) + '\n' + ('% 5d' % -10)
   10
  -10 # 加‘ ’可以方便同樣的縮進(jìn)
>>> print('%+5d' % 10) + '\n' + ('%+5d' % -10)
  +10
  -10 #加+可以保證結(jié)果中包含正負(fù)有同樣的縮進(jìn)

圍繞上述所提到的這些知識(shí)點(diǎn)蒿柳,該書書寫了一個(gè)例子,要求的輸出結(jié)果如下所示漩蟆±萏剑可以自己寫代碼試試看,參考答案在下面:

Screen Shot 2015-01-07 at 1.58.39 PM.png

如下為個(gè)人的版本:

width = int(raw_input('Please enter with:'))
print '=' * width
print 'Item' + '% *s' % (width - len('Item'), 'Price')
print '-' * width
print 'Apples' + '% *s' % (width - len('Prices'), '0.40')
print 'Pears' + '% *s' % (width - len('Pears'), '0.50')
print 'Cantaloupes' + '% *s' % (width - len('Cantaloupes'), '1.92')
print 'Dried Apricots (16 oz. )' + '% *s' % (width - len('Dried Apricots (16 oz. )'), '8.00')
print 'Prunes (4 lbs. )' + '% *s' % (width - len('Prunes (4 lbs. )'), '12.00')
print '=' * width

如下為該書給出的示例版本(生在做了抽象和使用了“-”來左對(duì)齊):

width = int(raw_input('Please enter with:'))
price_width  = 10
item_width = width - price_width
head_format = '%-*s%*s'
list_format = '%-*s%*.2f'
print '=' * width
print head_format % (item_width, 'Item', price_width, 'Price')
print '-' * width
print list_format % (item_width, 'Apples', price_width, 0.4)
print list_format % (item_width, 'Pears', price_width, 0.5)
print list_format % (item_width, 'Cantaloupes', price_width, 1.92)
print list_format % (item_width, 'Dried Apricots (16 oz. )', price_width, 8.00)
print list_format % (item_width, 'Prunes (4 lbs. )', price_width, 12)
print '=' * width

字符串方法

字符串方法有很多怠李,在該書的附錄B中又詳細(xì)描述圾叼,如下只列舉最常用的方法:

  • find()
    find方法提供了在字符串中查找子字符串的功能,找到了返回子字符串左端索引捺癞,否則返回-1夷蚊。還可以指定查找范圍:通過指定開始索引位置和終止索引位置。

    >>> sentence = 'Klay Thompson is as smart of a defender as it gets.'
    >>> sentence.find('Thompson')
    5
    >>> sentence.find('Lebron')
    -1
    >>> sentence.find('Thompson', 8)
    -1
    
  • join()

join方法是split方法的逆方法髓介,join的列表中必須都是字符串惕鼓。

>>> seq = [1,2,3,4,5]
>>> ','.join(seq) //TypeError

>>> seq = ['1','2','3','4', '5']
>>> ','.join(seq)
'1,2,3,4,5'

>>> dirs = '', 'usr', 'bin', 'env'
>>> '/'.join(dirs)
'/usr/bin/env'

>>> print 'C:'  + '\\'.join(dirs)
C:\usr\bin\env
  • lower()

    >>> 'The defensive philosophies of Klay Thompson'.lower()
    'the defensive philosophies of klay thompson'
    
  • replace()

>>> 'This is an egg'.replace('is', 'ezz')
'Thezz ezz an egg' #替換所有匹配項(xiàng)
  • split()

    >>> '1,2,3,4,5'.split(',')
    ['1', '2', '3', '4', '5']
    
    >>> '/usr/bin/env'.split('/')
    ['', 'usr', 'bin', 'env']
    
    >>> 'Using the default'.split()
    ['Using', 'the', 'default']
    
  • strip()

    >>> ' Thompson read it easily. '.strip()
    'Thompson read it easily.'
    
  • translate()

>>> from string import maketrans
>>> table = maketrans('cs', 'kz')
>>> 'This is an incredible test'.translate(table)
'Thiz iz an inkredible tezt'
>>> 'This is an incredible test'.translate(table,' ')
'Thizizaninkredibletezt'

maketrans指定了要替換的字符匹配關(guān)系,將得到的table作為參數(shù)傳遞給translate就可以進(jìn)行“多”字符的替換了唐础。其中第二個(gè)參數(shù)可以指定要?jiǎng)h除的字符串箱歧。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市一膨,隨后出現(xiàn)的幾起案子呀邢,更是在濱河造成了極大的恐慌,老刑警劉巖豹绪,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驼鹅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡森篷,警方通過查閱死者的電腦和手機(jī)输钩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仲智,“玉大人买乃,你說我怎么就攤上這事〉隽荆” “怎么了剪验?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長前联。 經(jīng)常有香客問我功戚,道長,這世上最難降的妖魔是什么似嗤? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任啸臀,我火速辦了婚禮,結(jié)果婚禮上烁落,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好蝠嘉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轧铁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旦棉。 梳的紋絲不亂的頭發(fā)上齿风,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音绑洛,去河邊找鬼救斑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诊笤,可吹牛的內(nèi)容都是我干的系谐。 我是一名探鬼主播巾陕,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼讨跟,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了鄙煤?” 一聲冷哼從身側(cè)響起晾匠,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梯刚,沒想到半個(gè)月后凉馆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亡资,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年澜共,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锥腻。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嗦董,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘦黑,到底是詐尸還是另有隱情京革,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布幸斥,位于F島的核電站匹摇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏甲葬。R本人自食惡果不足惜廊勃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望经窖。 院中可真熱鬧供搀,春花似錦隅居、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屿脐,卻和暖如春涕蚤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背的诵。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工万栅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人西疤。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓烦粒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親代赁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扰她,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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