字符串也是元組的一種匿辩,本章會(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é)果如下所示漩蟆±萏剑可以自己寫代碼試試看,參考答案在下面:
如下為個(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除的字符串箱歧。