1、元组
元组和列表一样,也是一种序列。唯一不同的是元组不能修改。
1,2,3 (1,2,3)
(1,2,3) (1,2,3)
() 空元组
42, (42,)
(42,) (42,)
注意:42和(42)是一样的,都是42
tuple() 将参数转化为元组
tuple([1,2,3])=>(1,2,3)
tuple('abc')=>('a','b','c')
**list('abc')=>['a','b','c']
元组存在的意义:
a、元组可以在映射(和集合的成员)中当作键使用————而列表不行
b、元组作为很多内建函数和方法的返回值存在。
2、内置函数
cmp(x,y) 比较两个值
len(seq) 返回序列的长度
list(seq) 把序列转化成列表
max(args) 返回序列或参数集合中的最大值
min(args) 返回序列或参数集合中的最小值
reversed(seq) 对序列进行反向迭代
sorted(seq) 返回已排序的包含seq所有元素的列表
tuple(seq) 把序列转化成元组
3、字符串
所有标准的序列操作对字符串同样试用。
字符串是不可变的。
字符串格式化操作符%
string="There are %d %s"
values=(5,'apples')
print string % values
===>There are 5 apples
如果values用列表表示,那么将会看作是一个值。
如果字符串包括%,则用%%表示。
如果要格式化实数,可以使用f说明类型,同时提供精度。
string="Pi with three decimals:%.3f"
from math import pi
print string % pi
===>Pi with three decimals:3.142
如果要自定义小数位数,就不能用格式化字符串了,可以用round()函数
i=raw_input('请输入要保留的小数位数:')
from math import pi
i=int(i)
print "Pi with "+str(i)+" decimals:"+str(round(pi,i))
===>请输入要保留的小数位数:5
Pi with 5 decimals:3.14159
另外string模块提供了另外一种格式化值的方法:模板字符串
这个也很巧妙,尤其是同样的格式,填补不同的值。
from string import Template
s=Template('$x,glorious $x!')
s.substitute(x='slurm')
===>'slurm,glorious slurm!'
from string import Template
s=Template("It's ${x}stastic!")
s.substitute(x='slurm')
===>"It's slurmstastic!"
from string import Template
s=Template("Make $$ selling $x!")
s.substitute(x='slurm')
===>'Make $ selling slurm!'
from string import Template
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'
4、字符串方法
常量:
string.digits 包含数字0~9的字符串
string.letters 包含所有字母的字符串
string.lowercase 包含所有小写字母的字符串
string.printable 包含所有可打印字符的字符串
string.punctuation 包含所有标点的字符串
string.uppercase 包含所有大写字母的字符串
方法:
find('x',start,end) 在一个较长的字符串中查找子串,返回子串所在位置的最左端索引,如果没有,返回-1。可选参数start,end,表示搜索起点和终点。
join(seq) split的逆方法,seq必须是字符串,可以是字符串组成的列表,也可以是元组。
seq=['1','2','3','4','5']
x='+'
x.join(seq)
print x
===>'1+2+3+4+5'
一种处理文件路径的巧妙方法:
dirs=('','this','is','a','test','dir')
string='C:'+'\\'.join(dirs)
print string
===>C:\this\is\a\test\dir
这样,通过替换某些元素,就可以修改路径了。
lower() 返回字符串的小写字母版
title() 返回所有单词首字母大写,其他部分小写
这也可以用string模块下的capwords函数处理
replace('before','after') 替换所有匹配项
split('symbol') 切割字符串成序列,'symbol'为切割符
strip() 返回去除两侧空格的字符串
strip('symbol') 去除两侧的'symbol'字符
translate() 和replace方法的功能一样,不同的是,translate()可以同时进行多个替换,效率比replace高得多。
在使用translate转换之前,需要先完成一张转换表,使用string模块里的maketrans完成。maketrans函数接受两个参数:两个等长的字符串,表示第一个字符串里的每个字符都用第二个字符串相同位置的字符替换。
原字符串stringtest="this is an incredible test."
使用translate处理,使其用k替换c,用z替换s
stringtest="this is an incredible test."
from string import maketrans
table=maketrans('cs','kz')
stringtest.translate(table)
===>thiz iz an inkredible tezt.
5、字典
dict()函数
items=[('a',1),('b',2)]
d=dict(items)
d={'a': 1, 'b': 2}
ss=dict(a=1,b=2)
print ss
ss={'a': 1, 'b': 2}
6、字典常用方法
len(d) 返回d中项(键-值对)的数量
d[k] 返回关联到键k上的值
d[k]=v 将值v关联到键k上
del d[k] 删除键为k的项
k in d 检查d中是否含有键为k的项
7、字典的巧妙应用
x=[]
x[5]='a'会报错
x={}
x[5]='a'
x={5: 'a'}
phonebook={'a':'1234','b':'2345','c':'4567'}
print "a's phone number is %(a)s." % phonebook
==>a's phone number is 1234.
用在模板里:opy['b'].replace('3','e')
template='''<html>
<head><title>%(title)s</title></head>
<body>
<h1>%(title)s</h1>
<p>%(text)s</p>
</body>'''
data={'title':"Long's Homepage",'text':'Welcome to my home page!'}
print template %data
===><html>
<head><title>Long's Homepage</title></head>
<body>
<h1>Long's Homepage</h1>
<p>Welcome to my home page!</p>
</body>
非常精妙的设计。
8、字典方法
clear() 清除字典中所有的项,这是个原地操作,无返回值
典例:
x={}
y=x
x['key']='value'
print y
x={}
print y
===>{'key': 'value'}
{'key': 'value'}
x的改变没有清空y
区别于:
x={}
y=x
x['key']='value'
print y
x.clear()
print y
===>{'key': 'value'}
{}
但x的clear方法会清空y
copy() 浅复制,返回一个具有相同键——值对的新字典。当在副本中替换值的时候,原始字典不受影响,但是如果修改了某个值,原地修改,而不是替换,原始字典也会改变,因为同样的值也存储在原字典里。
phonebook={'a':'1234','b':['bbb','ccc','ddd'],'c':'4567'}
pcopy=phonebook.copy()
pcopy['a']='qwer'
pcopy['b'].remove('bbb')
print phonebook
print pcopy
===>{'a': '1234', 'c': '4567', 'b': ['ccc', 'ddd']}
{'a': 'qwer', 'c': '4567', 'b': ['ccc', 'ddd']}
deepcopy() 深复制,来自copy模块,可以完全建立一个新的字典,修改互不影响。
from copy import deepcopy
phonebook={'a':'1234','b':['bbb','ccc','ddd'],'c':'4567'}
pcopy=deepcopy(phonebook)
pcopy['a']='qwer'
pcopy['b'].remove('bbb')
del pcopy['c']
print phonebook
print pcopy
===>{'a': '1234', 'c': '4567', 'b': ['bbb', 'ccc', 'ddd']}
{'a': 'qwer', 'b': ['ccc', 'ddd']}
fromkeys() 使用给定的键建立新字典
{}.fromkeys(['a','b'])
===>{'a': None, 'b': None}
dict.fromkeys(['a','b'],'1')#加默认值
===>{'a': '1', 'b': '1'}
get() 访问字典项时,如果访问不存在的项,get方法不会报错,而是返回None。也可以自定义返回值。
phonebook.get('f':'N/A')
has_key('x') 检查字典中是否包含给出的键
items() 将所有的字典项以列表的形式返回
iteritems() 返回字典的迭代器对象
phonebook={'a':'1234','b':'2345','c':'4567'}
iter=phonebook.iteritems()
list(iter)
===》 [('a', '1234'), ('c', '4567'), ('b', '2345')]
keys() 将字典中的键以列表的形式返回
iterkeys() 将字典中的键以迭代器的形式返回
pop('a') 获得对应于给定键的值,然后将这个键——值对从字典中删除
popitem() 类似于list.pop(),但是返回的元素没有顺序,这个方法可以一个接一个地处理字典项
setdefault() 类似于get方法,能够获得与给定键相关联的值,除此之外,setdefault还可以在字典中不含给定键的情况下设定相应的键值。
update() 利用一个字典项更新另一个字典
phonebook={'a':'1234','b':'2345','c':'4567'}
x={'b':'1234'}
phonebook.update(x)
print phonebook
===>{'a': '1234', 'c': '4567', 'b': '1234'}
values() 以列表的形式返回字典中的值
itervalues() 返回值的迭代器