今天开始Python入门知识(下)的学习,主要包括dict类型、Set类型、函数等知识点。
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
(1)dict的特点
查找速度快,dict不论多少元素,速度都一样,list的查找速度随着元素增加而下降;
存储的key-value对是没有顺序的,dict内部是无序的,不能用dict存储有序的集合;
key不可重复不可变;
内存占用大;
(2)访问dict
dict是Python中保存key-value的一种类型,dict就是通过key来查找 value的。
data = {
'A': 1,
'B': 2
}
{ }表示这是一个dict,最后一个 key: value的逗号可以省略。由于dict也是集合,len() 函数可以计算任意集合的大小:
>>> len(data)
2
接下来我们可以使用 data[key] 的形式来查找对应的 value:
>>> print data['A']
1
注意:如果key不存在,会直接报错:KeyError。
解决方法:
方法一:
用in操作符判断key是否存在:
if 'A' in data:
print data['A']
方法二:
使用dict本身提供的一个get方法,key不存在返回None:
>>> print data.get('A')
1
>>> print data.get('C')
None
(3)更新dict
>>> data['C'] = 3
>>> print data
{'A': 1, 'B': 2, 'C': 3}
(4)遍历dict
遍历dict可以通过for循环实现。
直接使用for循环遍历dict的key:
>>> data = {'A': 1, 'B': 2, 'C': 3}
>>> for key in data:
... print key
...
A
B
C
Set的元素无序不重复。
(1)Set的特点
Set的内部结构和dict类似,唯一区别就是不存储value,故判断一个元素是否在set中速度很快;
Set存储的元素必须是不变对象;
Set存储的元素是无序的;
(2)创建Set
创建Set的方式是调用set()并传入一个 list,list的元素将作为set的元素:
>>> data = set(['A', 'B', 'C'])
>>> print data
set(['A', 'C', 'B'])
注意:Set不能包含重复的元素,所以当我们传入包含重复元素的list时,set会自动去掉重复的元素。
(3)访问Set
Set存储的是无序集合,所以我们没法通过索引来访问。访问Set中的某个元素实际上就是判断一个元素是否在set中,如下:
>>> data = set(['A', 'B', 'C'])
# 我们可以用in操作符判断:
>>> 'B' in data
True
>>> 'D' in data
False
(4)添加新元素到Set
# 添加元素时,用Set的add()方法
>>> data = set(['A', 'B', 'C'])
>>> data.add('D')
>>> data.add('A') # 添加的元素已经存在于set中,add()不会报错,但是不会加进去了
>>> print data
set(['A', 'B', 'C', 'D'])
(5)删除Set集合中元素
# 删除元素时,用set的remove()方法
>>> data = set(['A', 'B', 'C'])
>>> data.remove('C') # 如果删除的元素不存在set中,remove()会报错,建议提前进行判断
>>> print data
set(['A', 'B'])
(5)遍历Set
通过 for 循环实现。
>>> data = set(['A', 'B', 'C'])
>>> for letter in data:
... print letter
...
A
B
C
(1)系统内置函数
Python内置了很多有用的函数,我们可以直接调用。
可以直接从Python的官方网站查看文档:
https://docs.python.org/2/library/functions.html
例如比较函数cmp(x, y):
# 需要两个参数,x<y返回-1,x==y返回0,x>y返回1
>>> cmp(5, 10)
-1
还有其他常用函数 abs()函数是求绝对值的函数、 int()函数可以把其他数据类型转换为整数、str()函数可以把其他类型转换成str,这里不再赘述。
(2)自定义函数
定义一个函数需要使用def语句,函数的返回值用return语句返回。
# 我们自定义一个求最大值的my_max函数:
def my_max(x, y):
if x >= y:
return x
else:
return y
一旦执行到return时,函数就执行完毕,并将结果返回。如果没有return语句,函数执行完毕后会返回None(return None可以简写为return)。
(3)定义可变参数
def my_num(*num):
print num
然后调用my_num函数:
>>> my_num()
()
>>> my_num('A')
('A',)
>>> my_num('A', 'B')
('A', 'B')
(1)对list进行切片
取一个list的部分元素的操作
# 取前3个元素
>>> data = ['A', 'B', 'C', 'D']
# 对list进行切片,L[0:3]表示,从索引0开始取,直到索引3(不包括3)为止。
>>> data[0:3] # 也可以写成 data[:3]
['A', 'B', 'C']
L[:]实际上复制出了一个新list。
(2)倒序切片
>>> data = ['A', 'B', 'C', 'D']
>>> data[-3:-1]
['B', 'C']
(3)对字符串切片
字符串可以用切片操作,只是操作结果仍是字符串:
>>> 'ABCDE'[:3]
'ABC'
>>> 'ABCDE'[-3:]
'CDE'
>>> 'ABCDE'[::2]
'ACE'
在Python中,迭代就可以理解为for循环,迭代是通过 for … in 来完成的,迭代操作就是对于一个集合,集合有如下几种:
1. 有序集合:list,tuple,str 和 unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict
(1)索引迭代
迭代永远是取出元素本身,而非元素的索引。
对于有序集合,我们可以使用enumerate() 函数在 for 循环中拿到索引:
>>> data = ['A', 'B', 'C']
>>> for index, value in enumerate(data):
... print index, '-', value
...
0 - A
1 - B
2 - C
(2)values()方法迭代dict的value
data = { 'A': 1, 'B': 2, 'C': 3}
print data.values()
# [1, 2, 3]
for v in data.values():
print v
# 1
# 2
# 3
用 itervalues() 方法替代 values() 方法,迭代效果完全一样。values() 方法把一个 dict 转换成了包含 value 的list。但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
(3)items()方法迭代dict的key和value
>>> data = { 'A': 1, 'B': 2, 'C': 3}
>>> for key, value in data.items():
... print key, ':', value
...
A : 1
B : 2
C : 3
items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
生成列表。
>>> range(1, 6)
[1, 2, 3, 4, 5]