Python学习笔记-第三章 使用字符串

已经到了第三章,虽然进度比较慢,还是信心满满,目前还没有遇到特别难理解的,还是在打基础。学编程就是要多练习多用才会进步。加油!

第三章 使用字符串

字符串已经知道了就是用str定义的类型,引号里面的内容。

3.1 基本字符串操作

所有标准的序列操作(索引、分片、乘法、判断成员资格、求长度、取最大最小值)对字符串同样适用,但是字符串是不可变的,因为对原字符串进行改动的操作都是非法的。

website='http://www.python.org'
website[-3:]='com'  #报错,分片赋值不可用
'a'+'b'  #返回值'ab'
'a'*3  #返回值'aaa'
x='abcde'
x.index('b')  #返回值1
x.append('f')  #报错
x.count('a')  #统计a的数量,返回1
x.extend('f')  #报错
x.reverse() #报错
x.sort()   #报错
len(x)     #返回值5,该字符串的长度为5
max(x)  #返回值'e'
min(x)  #返回值'a'

3.2 字符串格式化:精简版

字符串格式化用字符串格式化操作符%来实现。

使用方法:%左侧放置一个字符串,右侧放置希望格式化的值。

format="hello,%s,%s enough for ya?" #这里的s可以是任何字母,但是两个必须用同一字母
values=('world','hot')  #values的值字符数必须跟上一句需要格式化的数目一致
print(format % values)  #返回值hello,world,hot enough for ya?,s被value的值取代

%s部分被称为转换说明符,标记了需要插入转换值的位置,s表示值会被格式化为字符串。

如果要在格式化字符串里面包括百分号,那么必须用%%。

format="P1 with three decimals:%.3f"   #f表示浮点类型,3f表示小数点后三位
from math import pi
print(format % pi)   #返回值P1 with three decimals:3.142
模板字符串。substitute这个模板方法会用传递进来的关键字参数foo替换字符串中的$foo.
from string import Template
s=Template('$x,glorious $x!')
s.substitute(x='slurm')    #返回值'slurm,glorious slurm!' 
s=Template("it's ${x}tastic!")   #替换值是单词的一部分,把要替换的部分用{}括起来
s.substitute(x='slurm')   #返回值"it's slurmtastic!"
s=Template("Make $$ selling $x!")   #要显示美元符号,必须用$$
s.substitute(x='slurm')  #返回值'Make $ selling slurm!'
s=Template('A $thing must never $action.')
d={}                #用字典变量提供值/名称
d['thing']='gentleman'
d['action']='show his socks'
s.substitute(d)   #返回值'A gentleman must never show his socks.'

3.3 字符串格式化:完整版

格式化操作符的右操作数可以是任何东西。

如果需要转换的元组作为表达式的一部分存在,必须将它用圆括号括起来。

'%s plus %s equals %s' %(1,1,2)   #返回值'1 plus 1 equals 2'
'%s plus %s equals %s' % 1,1,2   #报错


基本的转换说明符
%字符%字符标记转换说明符的开始
转换标志-表示左对齐,+表示在转换值之前要加上正负号,“”(空白字符)表示正数之前保留空格,0表示转换值若位数不对用0填充
最小字段宽度转换后的字符串至少应该具有该值指定的宽度,如果是*,则宽度会从值元组中读出
点(.)后跟精度值如果转换的是实数,精度值表示小数点后的位数。如是字符串,表示最大字段宽度,*精度从元组中读出






字符串转换类型
转换类型含义
d,i带符号的十进制整数
o不带符号的八进制
u不带符号的十进制
x不带符号的十六进制(小写)
X不带符号的十六进制(大写)
e科学计数法表示的浮点数(小写)
E科学计数法表示的浮点数(大写)
f,F十进制浮点数
g如果指数大于-4或者小于精度值则和e相同,其它情况与f相同
G如果指数大于-4或者小于精度值则和E相同,其它情况与F相同
C单字符(接受整数或者单字符字符串)
r字符串(使用repr转换任意python对象)
s字符串(使用str转换任意python对象)















3.3.1 简单转换

只需要写出转换类型

'Price of eggs: $%d' % 42    #返回值'Price of eggs: $42'
'hexadecimal price of eggs: %x' % 42   #返回值'hexadecimal price of eggs: 2a',用16进制表示鸡蛋的价格
from math import pi
'pi: %f...' %pi   #返回值'pi: 3.141593...'
'very inexact estimate of pi:%i' % pi  #返回值'very inexact estimate of pi:3'
'Using str: %s' % 42 #不需要在42后面加l,加了反而报错,返回'Using str: 42'
'Using repr:%r' % 42  #返回值 'Using repr:42'

3.3.2 字段宽度和精度

字段宽度是转换后的值所保留的最小字符的个数,精度(对数字转换来说)是结果中应该包含的小数位数,或者(对字符串转换)是转换后的值能包含的最大 字符个数。

这两个参数都是整数(首先是字段宽度,然后是精度),通过点号分隔,这两个参数是可选的,如果只有精度,就必须包含句点。

'%10f' % pi  #字段宽度为10,返回'  3.141593' #实际宽度达不到10,所以在前面加了两个空格
'%8f' %pi  #字段宽度为8,返回'3.141593'
'%10.2f' %pi  #返回值'      3.14',字段宽度为10,精度为2,显示小数点后2位
'%.2f'%pi   #返回值'3.14',精度为2
'%.5s' %'Guido van Rossum'  #返回值'Guido',精度为5

3.3.3 符号、对齐和0填充

'%010.2f'%pi  #返回值'0000003.14',字段宽度10前面的0表示0填充
'%-10.2f'%pi   #返回值'3.14      ',-表示左对齐
'%+10.2f'%pi   #返回'     +3.14',+表示加上正负号,默认只是在前面填充空格
'%-+10.2f'%pi   #返回值'+3.14     ',左对齐并加上正负号
print(('% 5d' % 10)+'\n'+('% 5d' % -10))  #返回值 10,-10。自动在正数前加空格。
print(('%+5d' % 10)+'\n'+('% 5d' % -10))   #返回值+10,-10

字符串格式化示例

#使用给定的宽度打印格式化后的价格列表
width = int(input('Plese enter width: '))  #新版必须要先对参数设定类型,否则会报错
  
price_width = 10  
item_width = int(width-price_width) #同理,这里也是要设定数据类型
  

header_format = '%-*s%*s'   #减号(-1)用来左对齐数值  
format = '%-*s%*.2f'   #这里第二个*后没有s,如果加上s,浮点数无效,只会在结尾加上.2f。Why?
  
print('=' * width)   #输入数据有多宽就打印多少个等号
  
print(header_format % (item_width, 'Item', price_width, 'Price'))
  
print('-' * width)  
  
print(format % (item_width, 'Apples', price_width, 0.4)) 
print(format % (item_width, 'Pears', price_width, 0.5))
print (format % (item_width, 'Cantaloupes', price_width, 1.92) ) 
print (format % (item_width, 'Dried Apricots (16 oz.)', price_width, 8) ) 
print (format % (item_width, 'Prunes (4 lbs.)', price_width, 12)  )
  
print( '=' * width)

3.4 字符串方法

3.4.1 find

find方法可以在一个较长的字符串中查找字符串,返回子串所在位置的最左端索引,如果没有找到,返回-1.

'with a moo-moo here, and a moo-moo there'.find('moo')  #返回值7,moo第一次出现是在位置7上。
title="monty python's flying circus"  
title.find('monty')    #返回值0,find方法不返回布尔值,出现0,说明是在位置0上。
title.find('Monty')  #返回值-1,区分大小写,且'Monty'不在字符串中。
还可以设定查找的起始点和终止值的范围

subject='$$$ get rich now!!! $$$'
subject.find('$$$')   #返回值0
subject.find('$$$',1) #设置起始点,返回值20.
subject.find('!!!')  #返回值16
subject.find('!!!',0,16)  #返回值-1。设置了开始点跟结束点,还没有找到就结束了。

3.4.2 join

是split的逆方法,用来在队列中添加元素。需要添加的队列元素都 必须是字符串。

seq=[1,2,3,4,5]
sep='+'
sep.join(seq)   #seq和sep类型不一致,报错
seq=['1','2','3','4','5']
sep='+'
sep.join(seq)  #返回值'1+2+3+4+5'
dirs='','usr','bin','env'
 '/'.join(dirs)     #返回值'/usr/bin/env'
print('c:'+'\\'.join(dirs))  #返回值c:\usr\bin\env

3.4.3 lower

返回字符串的小写字母版。

'Trondheim Hammer Dance'.lower()   #返回值'trondheim hammer dance' 
要编写不区分大小写的代码时,这个方法可以忽略大小 写状态。

name='Gumby'
names=['gumby','smith','jones']
if name.lower() in names:print( 'Found it!')  #返回值Found it!lower将所有的字符串都变成小写。这里要按两次回车键才会返回结果。

Title方法,将字符串转换为标题,所有单词的首字母大写

"that's all folks".title()  #返回值"That'S All Folks",绝对是处女座好帮手
capwords函数

import string
string.capwords("that's all, folks")  #返回值"That's All, Folks",看到区别了吗?这回's没有大写。

3.4.4 replace

返回某字符串的所有匹配项均被替换之后得到字符串。

'This is a test'.replace('is','eez')   #返回值'Theez eez a test',不就是word中的ctrl+H查找替换功能嘛。

3.4.5 split

join的逆方法,用来将字符串分割成序列。

'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']
'1+2+3+4+5'.split()   #返回值['1+2+3+4+5'],只有空格不用特别指定。

3.4.6 strip

除去两侧(不包括内部)空格的字符串。

'       internal whitespace is kept       '.strip()   #返回值'internal whitespace is kept',再次确定python不是处女座编出来的?


names=['gumby','smith','jones']<pre name="code" class="python">name='gumby '   #这回是不小心在名字后面多打了一个空格
if name in names:print('found it!') #没有返回值if name.strip() in names:print('found it!') #返回值found it!

 也可以指定要去除的字符 

'***Spam*  for * everyone!!!***'.strip('*!')  #返回值'Spam*  for * everyone',只会去除两侧的字符。

3.4.7 translate

和replace一样,可以替换字符串中的某些部分,区别在于,replace只处理单个字符。在同时进行多个替换时,比replace效率高。

语法: str.maketrans(intab, outtab]),新版本string模块中的maketrans了,取代的是内建函数bytearray.maketrans()、bytes.maketrans()、str.maketrans()

使用translate转换之前,需要先完成一张转换表,转换表中是以某字符替换某字符的对应关系。

table=str.maketrans('cs','kz')
table  #返回值{115: 122, 99: 107}。#变成了table的值变成了字典,下一章会讲到。
len(table)  #返回值2
'this is an incredible test'.translate(table)  #返回值'thiz iz an inkredible tezt',无法输入第二个参数。Why?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值