第四章 组合数据结构

4.1 集合

集合中的元素具有唯一,无序,不可改变等特点

4.1.1 集合常量
  • 集合常量用大括号表示,也可以用set()函数创建集合对象

  • 空集合对象用set()表示,空字典对象用{}表示

  • 创建格式

    • x = {value1,value2,...}  # 直接使用集合常量
      set(value)  #set()创建,其中value为可迭代对象,如列表,对象等
      
4.1.2 集合运算
  • 求长度:len()

    len(x) # 计算集合中的元素个数
    
  • 判断包含:in

    'a' in x  # 判断集合是否包含元素
    
  • 求差集:-

    x - y  # 用属于x但不属于y的元素创建新集合
    
  • 求并集:|

    x | y  # 用x,y两个集合中的所有元素创建新集合
    
  • 求交集:&

    x & y  # 用同时属于x和y的元素创建新集合
    
  • 求对称差:^

    x ^ y  # 用属于x但不属于y以及属于y但不属于x的元素创建新集合
    
  • 比较:<

    x < y  # 判断子集和超集关系,x是y的子集返回True,否则返回False
    
4.1.3 集合基本操作
  • 复制集合对象

    x = {1,2}
    y = x.copy()
    
  • 为集合添加一个元素

    s.add( x ) #将元素x添加到集合s中,如果元素已存在,则不进行任何操作。
    
  • 为集合添加多个元素

    s.update( x ) #x可以有多个,用逗号分开
    
  • 删除集合中指定元素

    s.remove( x ) 
    
  • 集合内置方法

    方法描述
    add()为集合添加元素
    clear()移除集合中的所有元素
    copy()拷贝一个集合
    difference()返回多个集合的差集
    difference_update()移除集合中的元素,该元素在指定的集合也存在。
    discard()删除集合中指定的元素
    intersection()返回集合的交集
    intersection_update()返回集合的交集。
    isdisjoint()判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
    issubset()判断指定集合是否为该方法参数集合的子集。
    issuperset()判断该方法的参数集合是否为指定集合的子集
    pop()随机移除元素
    remove()移除指定元素
    symmetric_difference()返回两个集合中不重复的元素集合。
    symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
    union()返回两个集合的并集
    update()给集合添加元素
4.1.4 冻结集合
  • 冻结集合是一个不可改变的集合

  • 冻结集合的输出格式与普通集合不同

    >>> x = frozenset  #创建冻结集合
    >>> print(x)  #输出冻结集合
    

4.2 列表

列表和元组都属于序列,序列支持索引,分片和合并等操作。字符串属于特殊的不可变序列。

4.2.1 列表基本特点和操作
  • 列表常量用方括号表示。主要特点如下:

    • 列表可以包含任意类型的对象
    • 列表是一个有序序列
    • 列表是可变的
    • 每个列表元素存储的是对象的引用
  • 创建列表:列表对象可用列表常量或list()函数来创建

    list1 = []  #创建空列表对象
    list2 = list()  #创建空列表对象
    
  • 求长度:len()

    len([1,2,3]) # 输出结果为3
    
  • 合并:+

    [1,2] + [3,4] # 输出结果为 [1,2,3,4]
    
  • 重复:*

    [1,2]*3 # 输出结果为 [1,2,1,2,1,2]
    
  • 迭代

    >>> x = [1,2,('a','abc'),[12,34]]
    >>> for a in x: print(a)
    ...
    1
    2
    ('a','abc')
    [12,34]
    
  • 关系判断:in

    >>> 2 in [1,2,3]
    True
    >>> 'a' in [1,2,3]
    False
    
  • 索引

    >>> x = [1,2,['a','b']]
    >>> x[0] # 输出列表的第一个数据
    1
    >>> x[2] # 输出列表的第3个数据
    ['a','b']
    
  • 分片

    与字符串类似,可通过分片来获取列表中的连续多个数据,也可以通过分片将连续多个数据替换成新的数据

4.2.2 常用列表方法
  • 添加单个数据:append()

    s.append( x ) # 在列表末尾加入一个数据
    
  • 添加多个数据:extend()

    s.extend( xyz ) # 在列表末尾加入多个数据
    
  • 插入数据:insert()

    s.insert( x,'abc' ) # 在x位置插入'abc'
    
  • 按值删除数据:remove()

    s.remove( x ) #  删除指定的值,有重复值则删除第一个
    
  • 按位置删除数据:pop()

    s.pop( x ) # 删除偏移量为x的对象
    
  • 用del语句删除:

    del x[0] # 删除第一个数据
    
  • 删除全部数据:clear()

    s.clear() #删除s列表的全部数据
    
  • 复制列表:copy()

    x = [1,2,3]
    s = x.copy()
    
  • 列表排序:sort()

    s.sort()  # 若列表对象全为数字则从小到大排序;全为字符串则按字典序
    

4.3 元组

元组可以看作是不可变的列表,它具有列表的大多数特点。

4.3.1 元组的特点和操作
  • 元组的主要特点

    • 元组可以包含任意类型的对象
    • 元组是有序的。元组中的对象可通过位置进行索引和分片
    • 元组的大小不能改变,即不能为元组添加对象,也不能删除元组中的对象
    • 元组中的对象不能改变
    • 元组中存储的是对象的引用,而不是对象本身
  • 创建元组:可以用元组常量或者tuple()方法来创建元组对象

    tup1 = () # 创建空元组对象
    tup2 = tuple() # 创建空元组对象
    tup3 = (2,) # 包含一个对象的元组,不能缺少逗号
    
  • 求长度:len()用于获取元组长度

    len( (1,2,3,4) )  # 结果为4
    
  • 合并:加法运算 +可用于合并多个元组

    (1,2) + (3,4) # 结果为(1,2,3,4)
    
  • 重复:乘法运算*可用于合并多个重复的元组

    (1,2)*2  # 结果为(1,2,1,2)
    
  • 迭代

    >>> for x in (1,2.5,'abc',[1,2]):print(x)
    ...
    1
    2.5
    abc
    [1,2]
    
  • 关系判断:in判断元组是否包含某个值

    2 in (1,2) # 结果为 True
    5 in (1,2) # 结果为 False
    
  • 索引和分片

4.3.2 元组的方法
  • count():返回指定值在元组中出现的次数
  • index(value, [start,[end]] ):用于在元组中查找指定值

4.4 字典

字典是一种无序的映射集合,包含一系列键值对。

4.4.1 字典的特点和操作
  • 字典的基本特点

    • 字典的键名称通常采用字符串,也可以用数字,元组等不可变的类型数据
    • 字典的值可以是任意类型
    • 字典也称为关联数组或散列表,它通过键映射到值。字典是无序的,它通过键来访问映射的值,而不是通过位置来索引
    • 字典属于可变映射,可修改键映射的值
    • 字典的长度可变,可为字典添加或删除键值对
    • 字典可以任意嵌套,即键映射的值可以是一个字典
    • 字典存储的是对象的引用,而不是对象本身
  • 创建字典:可通过多种方式来创建字典

    dict1 = {} # 创建空字典
    dict2 = dict() # 创建空字典
    
  • 求长度:len()返回字典长度,即键值对的个数

  • 关系判断:in判断字典是否包含某个键

  • 索引:字典可通过键来索引其映射的值

4.4.2 字典常用方法
  • clear():删除全部字典对象
  • copy():复制字典对象
  • get(key [,default]):返回键key映射的值。如果key不存在,返回空值。可用default参数指定键不存在时的返回值
  • pop(key [,default]): 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
  • popitem(): 随机返回并删除字典中的最后一对键和值。
  • updata(other):为字典添加键值对
4.4.3 字典视图
  • items():返回键值对视图
  • keys():返回键视图
  • values:返回值视图

键视图支持各种集合运算,键值对视图和值视图不支持集合运算

4.5 迭代和列表解析

4.5.1 迭代

字符串,列表,元组和字典等对象均支持迭代操作,可使用迭代器遍历对象

  • 迭代是Python最强大的功能之一,是访问集合元素的一种方式
  • 迭代器是一个可以记住遍历的位置的对象
  • 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退
  • 迭代器有两个基本的方法:iter()next()
4.5.2 列表解析
  • 列表解析的基本结构

    表达式 for 变量 in 可迭代对象 if 表达式
    
  • 带条件的列表解析

    list1 = [x + 10 for x in range(10) if x % 2 == 0]  # 用if筛选偶数
    print("list1 = ", list1)  # list1 =  [10, 12, 14, 16, 18]
    
  • 多重嵌套解析

    list2 = [x + y for x in (10, 20) for y in (1, 2, 3)]
    print("list2 = ", list2)  # list2 =  [11, 12, 13, 21, 22, 23]
    
  • 列表解析生成元组

    tup1 = tuple(x * 2 for x in range(5))
    print("tup1 = ", tup1)  # tup1 =  (0, 2, 4, 6, 8)
    
  • 列表解析生成集合

    set1 = {x for x in range(10)}
    print("set1 = ", set1)  # set1 =  {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    
  • 列表解析生成字典

    dict1 = {x: ord(x) for x in 'abcd'}
    print("dict1 = ", dict1)  # dict1 =  {'a': 97, 'b': 98, 'c': 99, 'd': 100}
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值