3_组合数据类型
1. 列表
1.1 列表的常用操作
list=[0,1,2,3,4,5,6,7,8,9,10]
list1=[11,12]
>>>list[1:5] ##列表切片,左闭右开
[1, 2, 3, 4]
>>>list[1:5:2] ##控制跳转步幅
[1,3]
>>>list[::2] ##常用的步幅跳转策略
[0, 2, 4, 6, 8, 10]
>>>for x in list: ##列表遍历
print(x)
0
1
2
3
4
5
6
7
8
9
10
>>>list+=list1 ##两种方法合并列表
>>>list.extend(list1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>>list.append('T') ##在列表末尾添加元素
[0,1,2,3,4,5,6,7,8,9,10,'T']
>>>list.insert(0,'x') ##指定位置添加元素
['x',0,1,2,3,4,5,6,7,8,9,10,'T']
>>>list.count('x') ##计数某元素出现的次数
1
>>>list.index('x') ##返回某元素第一次出现的位置,不在则会返回异常
0
>>>del list[0] ##删除指定位置的元素
[0,1,2,3,4,5,6,7,8,9,10,'T']
>>>list.remove('T') ##顺序检索删除指定元素一次,不在则会返回异常
[0,1,2,3,4,5,6,7,8,9,10]
>>>list.pop(2) ##删除并返回指定位置的元素,缺省为末尾
2
>>>list
[0,1,3,4,5,6,7,8,9,10]
>>>s='Hello' ##字符串转化为列表
>>>t=list(s)
>>>t
['H','e','l','l','o']
1.2 列表的常用函数
list1=[123,213]
list2=[123,321]
list3=[123,123]
>>>cmp(list1,list2) ##列表比较
-1
>>>cmp(list1,list2)
1
>>>cmp(list1,list3)
0
>>>max(list1) ##最大值
213
>>>min(list2) ##最小值
123
>>>sum(list1) ##求和
336
2. 元组
元组和列表大部分相同,唯一区别在于元组是不可变的!
不可变的真正含义是:元组内每个元素所指向的地址不变!所以当元组内的元素是列表时,可以改变这个列表内的元素的值,因为本身这个列表的地址并没有因此而改变。
>>>t=(1,) ##逗号不可以省略
>>>list=[1,2,3]
>>>t=tuple(list) ##列表转换为元组
(1,2,3)
3. 字典
3.1 字典的常用操作
##使用zip函数结合两个元组创建字典
>>>d=dict(zip(('id','name','city'),(19,'Jack','BeiJing')))
{'id': 19, 'name': 'Jack', 'city': 'BeiJing'}
>>>for key in d.keys(): ##字典遍历
print(key,d[key])
id 19
name Jack
city BeiJing
>>>del d['id'] ##删除指定的键值对
{'name': 'Jack', 'city': 'BeiJing'}
>>>d.pop('city') ##使用popitem可以随机删除
'BeiJing'
>>>d
{'name': 'Jack'}
3.2 字典的常用函数
3.2.1 深浅拷贝
>>>x={'id': 19, 'name': 'Jack', 'city': 'BeiJing'}
>>>y=x,copy() ##浅拷贝,只是原来对象的一个引用
{'id': 19, 'name': 'Jack', 'city': 'BeiJing'}
>>>from copy import deepcopy
>>>de_y=deepcopy(x) ##导入模块进行深拷贝
{'id': 19, 'name': 'Jack', 'city': 'BeiJing'}
3.2.2 给定键建立字典
>>>list=['name','id','city'] ##可以自己设置值是什么,默认为None
>>>dict.fromkeys(list,'unknow')
{'name':'unknow','id':'unknow'}
3.2.3 get()方法访问
##即使不存在,不会返回异常,而是返回None
3.2.4 items方法
>>>x={'id': 19, 'name': 'Jack', 'city': 'BeiJing'}
>>>x.items()
dict_items([('id', 19), ('name', 'Jack'), ('city', 'BeiJing')])
3.2.5 获取键、值列表
##返回为列表形式
>>>x={'id': 19, 'name': 'Jack', 'city': 'BeiJing'}
>>>x.keys()
>>>x.values()
dict_keys(['id', 'name', 'city'])
dict_values([19, 'Jack', 'BeiJing'])
3.2.5 update方法
##用另一份字典来更新字典,存在则覆盖,不存在则添加
>>>x={'id': 19, 'name': 'Jack', 'city': 'BeiJing'}
>>>y={'uc':'I'}
>>>x.update(y)
{'id': 19, 'name': 'Jack', 'city': 'BeiJing','uc':'I'}
4. 集合
s=set([1,2,3,4,])
>>>s.add(5) ##添加元素
{1,2,3,4,5}
>>>s.remove(4) ##删除元素,不存在会报错
{1,2,3,5}
>>>s.discard(4) ##删除元素,不存在不会报错
{1,2,3,5}
`````````````````````````````````````````````````````````````````````````````````````
s1=set([1,2,3,4])
s2=set([3,4,5,6,7])
>>>s1.intersection(s2) ##交集
>>>s1 &s2
{3,4}
>>>s1.union(s2) ##并集
>>>s1 | s2
{1,2,3,4,5,6,7}
>>>s1.difference(s2) ##差集
>>>s1-s2
{1,2}
>>>s1.symmetric_difference(s2) ##对称差集
>>>s2.symmetric_difference(s1)
{1,2,5,6,7}
s1.issubset(s2) ##子集
s1.issuperset(s2) ##超集
5. 列表生成式
>>>[x*x for x in range(1,11) if x % 2 == 0]
[4,16,36,64,100]
>>>[m + n for m in "AB" for n in "XY"]
["AX","AY","BX","BY"]
6. 生成器——generator
列表生成式在元素量较少时推荐使用,但是在大量元素时,有时并不需要中间某些元素的意义,只需要一个算法推演,于是在python中,一边循环一边计算的机制,就叫生成器——generator
##将列表生成式的[]改成()即可得到生成器
L = [x*x for x in range(1,11)]
G = (x*x for x in range(1,11))
>>>next(G) ##简单的得到下一个元素
1
>>>next(G)
4
>>>def fib(max): ##利用yield生成一个斐波那契数列的生成器
n,a,b=0,0,1
while n<max:
yield b
a,b=b,a+b
n+=1
return 'done'
>>>f=fib(6)