Dive Into Python学习笔记2
chap3 内置数据类型
3.1 Dictionary(字典):键值一对一关系
(1)、d = {"server":"mpilgrim","database":"master"}
d["database"]
d
(2)、key不能重复,赋值时覆盖原有的值;key大小写敏感。
d["database"]="pubs"
(3)、dictionary没有元素顺序的概念。
(4)、混用数据类型:
Dictionary的值可以是任意数据类型。单个dictionary里的值并不需要是同一数据类型。
d["retrycount"]=3
Dictionary的key可是是字符串、整数或几种其他类型,有限制。也可以同一dictionary中混用和匹配key的数据类型。
(5)、删除元素
del d["server"]--删除独立的元素
d.clear()--清除所有元素
注:空的大括号表示没有元素的dictionary。
3.2 List(列表)
(1)、li = ["a","b","example","mpilgrim","Z"]
li[2]
li
li[-1]--尾部开始计数
(2)、list的分片(slice)
li[1:3]
li[1:]
li[:4]
li[:]
li[1:-1]
(3)、增加元素
li.append("new")
li.insert(2,"new")
li.extend(["two","elements"])--extend用来连接list,与追加不同。
(4)、list中的搜索
li.index("new")--在list中查找一个值的首次出现并返回索引值
"c" in li --测试一个值是否在list内,使用in。返回True或False(python大小写敏感)。
注:
python的布尔环境遵循下面的规则:
0 为 false; 其它所有数值皆为 true。
空串 ("") 为 false; 其它所有字符串皆为 true。
空 list ([]) 为 false; 其它所有 list 皆为 true。
空 tuple (()) 为 false; 其它所有 tuple 皆为 true。
空 dictionary ({}) 为 false; 其它所有 dictionary 皆为 true。
(5)、删除list中的元素
li.remove("new")--remove仅仅删除一个值的首次出现。
li.pop()--删除list的最后一个元素,并返回这个元素。
(6)、使用list的运算符
li = li + ['example','new']--相当于li.extend,但没有extend的报告速度快。
li += ['two']
li = [1,2] *3 --有趣的乘法
3.3 Tuple
tuple是不可变的list。
t = ("a","b","mpilgrim","z","example")--圆括号,不是方括号
t
t[0]
t[-1]
t[1:3]
tuple没有方法:没有append或extend方法来增加元素,没有remove或pop来删除元素,没有index或in来查找元素。
注:tuple的优点:
速度比list快,用作常量集般遍历
数据不变,安全
tuple可当作dictionary的key,但list不行。
tuple可用在字符串格式化中。
tuple可与list转换。冻结与解冻。
3.4 变量声明
(1)、python不允许引用一个未被赋值的变量,会引发一个异常。
(2)、一次赋多值
v = ('a','b','c')
(x,y,z) = v--每个值与v中的一一对应
注:python中可使用内置的range函数和多变量赋值的方法来快速赋值
print range.__doc__了解更多细节
注:可使用多变量赋值来创建返回多个值的函数,只要返回一个包含所有值的tuple即可。调用者可将其视为一个tuple,或将值赋给独立的变量。
3.5 格式化字符串
最基本的用法是将一个值插入到一个有字符串格式符%s的字符串中。
k = 'uid'
v = 'sa'
"%s = %s" % (k,v)--这是个tuple,有用的东东。
注:这不仅仅是格式化,也是强制类型转换。
+是字符串连接操作符,连接时只能在被连接的每一个都是字符串时起作用。
print "%s is not a good password for %s" % (pwd, uid)--%连接字符串print "Users connected: %d" % (userCount, )--%d表示连接整数
当定义一个只包含一个元素的 tuple 时逗号是必须的。
print "Today's stock price: %.2f" % 50.4625 --数值的格式化,定精度
3.6 映射list
(1)、
>>> li = [1, 9, 8, 4]
>>> [elem*2 for elem in li]
注 对 list 的解析并不改变原始的 list。
Python 会在内存中创建新的 list,当对 list 的解析完成时,Python 将结果赋给变量。
(2)、dictionary的函数:.key()、.values()、.items()
["%s=%s" % (k, v) for k, v in params.items()]
[k for k, v in params.items()]
3.7 连接list与分割字符串
(1)、连接
return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
字符串 ";" 本身就是一个对象,上例调用它的 join 方法。
注:join 只能用于元素是字符串的 list;它不进行任何的强制类型转换。
(2)、分割
>>> a = "*&*"
>>> b = a.join("abcdefg")
>>> b
'a*&*b*&*c*&*d*&*e*&*f*&*g'
>>> b.split(a)
['a', 'b', 'c', 'd', 'e', 'f', 'g']
注:split 与 join 正好相反,它将一个字符串分割成多元素 list。这在搜索子串时非常有用。