序列2(字符串、字典)-《python基础教程》笔记

字符串

一种常用的、不可变的序列


1.字符串的基本操作

序列的绝大部分基本操作对字符串同样适用(索引、分片、乘法、判断成员资格、求长度、取最小值和最大值)

但是字符串不可变,对字符串按索引赋值或者分片赋值都是不合法的


2.字符串格式化:精简版

字符串格式化操作符为'%'

格式: 格式化字符串 % 值

多个值时只能使用字典或者元组格式化(其他序列时会被解释为一个值)

举例1:

format ='hello %s. %s enouth for ya?'
values=('world','Hot')
print format % values
#格式化字符串中,%s标记了需要插入内容位置,s表示值会被格式化为字符串,不是字符串自动用函数str转换
#如果要在被格式化字符串使用百分号,使用'%%'

举例2:

'%s plus %s equals %s' % (1,1,2)
#当值为元组或者字典时,可以初始化多个元素,每个值对应一个转换说明符

#当值为元组,一定要加上'()'


模版字符串

string模版提供的另外一种格式化字符串方法,工作方式类似于UNIX Shell里的变量替换。

举例1:

from string import Template
s=Template('$x, glorious $x!')
#Tmpplate设置字符串
s.substitute(x='slurm')

#substitute用传递过来的关键字参数替换字符串中的‘$关键字',关键字可以自己设置

举例2:

s=Template("It's ${x}tastic! $$")
s.substitute(x='slurm')
#替换字段为单词的一部分时,用大括号'{}"括起来

#字符串中,可以采用$$插入美元符号

举例3:

s=Template('A $thing must never $action.')
d={}
d['thing']='gentleman'
d['action']='show his socks'
s.substitute(d)
#substitute参数亦可为字典
#safe_substitute不会因为缺少值或者不正确使用$字符而出错


3.字典格式化:完整版

基本的转换说明符包含以下5个部分,必须按照顺序书写

(1)%字符(必写)

(2)转换标志:

'-'表示左对齐

'+'表示在转换值之前加上正负号

' '(空白字符)表示在正书之前加上空格

'0'(数字)表示转换值若位数不够用0填充

(3)最小字段宽度:直接用数字表示,如果是'*',宽度会从值元组中读出

(4)精度值:'.数字'

如果是字符串需要时是实数,数字表示的是小数点后的位数;如果是字符串,数字表示的是最大字段宽度;

如果是'*',精度将从元组中读出

(5)转换类型


字段宽度和精度举例:

from math import pi
print'%10f' % pi       #字段宽度为10
print'%10.2f' % pi    #字段宽度为10 ,精度为2 
print'%.2f' %pi        #字段精度为2
print '%.*s' %(5,'Guido ban Rossum')   #字段精度从元组中读出


4.字符串方法

字符串从string模块中‘继承’了很多方法

以下是一些常用的字符串常量:

string.digits:包含0-9的字符串

string.letters:包含所有字母的字符串(包含大小写)

string.lowercase:包含所有小写字母的字符串

string.printable:包含所有可打印字符的字符串

string.punctuation:包含所有标点的字符串

sting.uppercase:包含所有大写字母的字符串


(1)find:在一个字符串中查找子串,返回子串所在位置最左端索引,没找到则返回-1



(2)join:用来连接序列中的元素,split方法的逆方法


(3)lower:返回字符串的小写字母版


title方法会将字符串转换成标题(首字母大写,但是识别单词并不准确)


string模块的capwords函数可能比title方法好用,但是正确的标题可能还是需要手动输入:



(4)replace:返回字符串所有匹配值被替换后的字符串



(5)split:将字符串分割成序列,join的逆方法



(6)strip:返回去除两侧空格的字符串:



(7)translate:对字符串中的单个字符进行替换


对于某些非英语字符串无法用常规方法处理时,可以考虑Unicode或者locale模块



字典

字典是python唯一内建的映射(一种通过键引用值的数据结构)

键可以是数字、字符串、元素

字典中元素没有顺序

字典的键是唯一的,但是值不唯一


1.创建和引用

字典用大括号表示,由多个键-值(项)对组成,键和值用‘:’隔开;项之间用‘,’隔开,举例如下:

(1)phonebook={'Alice':'2341','Beth','9102'}

(2)dict()函数,可以通过其他映射(如果是字典,此时函数相当于copy())或者(键,值)对的序列建立字典

items=[('name','Gumby'),('age',42)]

d=dict(items)

(3)dict()函数,亦可通过关键字参数创建字典

d=dict(name='Gumby',age=42)


2.字典基本操作

以下操作方式与序列相同,参考前文:

求长度、按索引求值、赋值、删除、检查键的成员资格

字典和列表的区别:

(1)字典的键可以是任意不可变类型,如整数、浮点型(实型)、字符串或者元组

(2)字典的键可以动态添加;但是列表不调用append或者类似方法情况下,不可以将值关联到列表范围以外的索引上

(3)表达式k in d(字典)查找的是键,而不是值;但是k in l(列表)查找的是值,而不是索引


3.用字典格式化字符串

在转换说明符%的后面加上用圆括号括起来的键

举例1:

phonebook={'Cecil':'9102'}

'Cecil\'s phone number is %(Cecil)s.' %phonebook

举例2:

template='''<html>
<head><title>%(title)s</title></head>
<body>
<h1>%(title)s</h1>
<p>%(text)s</p>
</body>'''
data={'title':'My Home Page','text':'Welcome to my home page!'}
print template % data


4.字典方法

(1)clear 清除字典中所有项

x.clear()


(2)copy 浅复制,返回一个相同字典

y=x.copy()

此时给y赋值时y的值改变x的值不改变;

但是由于是浅复制,对y调用append()、remove()等方法时,会改变x的值

此时,可以采用深复制解决这个问题:

from copy import deepcopy
d={}

dc=deepcopy(d)


(3)fromkeys 使用给定的键建立字典,每个键对应的默认值为None

{}.fromkeys(['age','name'])

#参数为一个序列

dict.fromkeys(['name','age'])

#不构造空字典,直接用dict调用(dict为所有字典的类型)

dict.fromkeys(['name','age'],'(unknown)')

#序列后接一个元组可以指定默认值


(4)get 宽松访问字典项的方法,项不存在时不会出错

d.get('name')

#返回该项的值,项不存在时返回None

d.get('name','N/A')

#返回该项的值,项不存在时返回‘N/A'


(5)has_key 检查字典中是否含有特定键

Python3.0中不包含该函数

d.has_key('name')

d.has_key(k)相当于表达式k in d,正确时返回True,错误返回False


(6)items 将字典里所有项以列表形式返回,每一项都是(键,值)的形式,没有次序

d.items()

iteritems方法大致相同,但是返回的是一个迭代器对象

it=d.iteritems()

list(it)

#多数情况下,iteritems会更加高效


(7)key 将字典中的键以列表形式返回

iterkeys返回关于键的迭代器


(8)pop 获得对应与给定键的值,然后将该项从字典中移除

d.pop('x')


(8)popitem 返回字典中任意一项,并从字典中移除该项

d.popitem()


(10)setdefault 类似于get方法,当该键存在时,返回该键对应的值;当该键不存在时,创建该键,并给出默认值

d.setdefault('name','N/A')


(11)update 利用一个字典更新另外一个字典

d.update(x)

#x中的不同键的新项将被添加到d中,x中同键的项将覆盖d中的项


(12)values 以列表的形式返回字典中的值

d.values()

itervalues 返回值的迭代器

猜你喜欢

转载自blog.csdn.net/qq_34242058/article/details/79511051