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)

       

       

       

       

上一篇:2021-01-17


下一篇:Android 什么是架构?