016.Python基础语法_集合操作

无奋斗不青春

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

分隔线

集合

概念

  • 概念
    • 无序的,不可随机访问的,不可重复的元素集合(不可随机访问:集合即没有索引,也没有key,只能通过循环取值)
    • 与数学中集合的概念类似,可以进行交、并、差、补等逻辑运算
    • 集合的元素只能是不可变类型
      不可变数据(3 个):number(数字)、string(字符串)、tuple(元组)、frozenset(不可变集合)
      可变数据(3 个):list(列表)、dictionary(字典)、set(可变集合)
    • 集合内部可以嵌套元组和不可变集合,不能嵌套列表、字典、可变集合

分类

  • 集合可分为可变集合和非可变集合
    • 可变集合:set,可进行增删改操作
    • 不可变集合:frozenset,不能进行增删改操作

定义

  • 可变集合定义
    • 方式一:通过{}直接定义一个集合

      s = {元素1, 元素2, ...}
      
    • 方式二:将一个可迭代对象转换成一个集合

      s = set(iterable)
      
      # 将列表转换为集合时,会自动将列表中的重复元素去重
      # 如果是将一个字典转换成集合,那么之后将字典的key作为集合的元素
      
      # 示例
      s1 = {1, 2, 3, 4, 5}
      s2 = set('abcd')
      s3 = set(['a', 'b', 'c', 'd', 'a', 'c'])
      s4 = set({'name': '失心疯', 'age': 36, 'sex': '男'})
      
      print(s1)       # --> {1, 2, 3, 4, 5}
      print(s2)       # --> {'b', 'c', 'a', 'd'}
      print(s3)       # --> {'b', 'c', 'a', 'd'}
      print(s4)       # --> {'name', 'age', 'sex'}
      
    • 方式三:集合推导式

      s = set(表达式 for 变量 in range(范围) if 条件)
      
      s = {表达式 for 变量 in range(范围) if 条件}
      
      # 示例
      s = set(x**2 for x in range(1, 11) if x % 2 ==0)
      print(s)        # --> {64, 100, 4, 36, 16}
      
  • 不可变集合定义
    • 方式一:将一个可迭代对象转换为集合
      s = frozenset(iterable)
          
      # 将列表转换为集合时,会自动将列表中的重复元素去重
      # 如果是将一个字典转换成集合,那么之后将字典的key作为集合的元素
      
    • 方式二:集合推导式
      s = frozenset(表达式 for 变量 in range(范围) if 条件)
      
      
  • 注意事项
    • 创建一个空集合时,需要使用set()或者frozenset(),不能直接使用s = {},python会吧{}默认定义为字典
    • 集合中的元素,必须是可哈希的值(不可变类型)
      (可哈希:如果一个对象在自己的生命周期中有一哈希值<hash value>是不可改变的,那么它就是可哈希的<hashable>)
    • 如果集合中的元素出现重复,则会被合并为1个

常用操作

  • 不可变集合frozenset()不能进行增删改操作
  • 通过add()添加
    分类
        对象方法
    作用
        给集合添加一个元素
    语法
        set.add(element)
    参数
        element:要添加的元素
    返回值
        返回None,直接修改原集合对象
    
  • 通过update()添加
    分类
        对象方法
    作用
        将可迭代对象中的多个元素添加到集合中
    语法
        set.update(iterable)
    参数
        iterable:可迭代对象
    返回值
        返回None,直接修改原集合对象
    
  • 不可变集合frozenset()不能进行增删改操作
  • 通过remove()删除
    分类
        对象方法
    作用
        指定删除集合对象中的一个元素
    语法
        set.remove(element)
    参数
        element:指定要删除的元素
    返回值
        返回None
        如果指定删除的元素不存在,则报KeyError错误
    
  • 通过discard()删除
    分类
        对象方法
    作用
        指定删除结合中的一个元素
    语法
        set.discard(element)
    参数
        element:指定要删除的元素
    返回值
        返回None
        如果指定删除的元素不存在,也是返回None
    
  • 通过pop()删除
    分类
        对象方法
    作用
        随机删除并返回一个集合中的元素
    语法
        set.pop()
    参数
        
    返回值
        返回被删除的元素
        如果集合为空,则报KeyError: 'pop from an empty set'错误
    
  • 通过clear()删除
    分类
        对象方法
    作用
        清空集合中的所有元素
    语法
        set.clear()
    参数
        
    返回值
        返回None,原集合对象编程空集合,并不会删除集合对象
    
  • 通过del语句删除
    分类
        
    作用
        删除集合对象
    语法
        del set
    参数
        
    返回值
        
    
* 集合元素为不可变类型,不能修改
  • 集合是一个无序的不可随机访问的一个元素集合,所以无法通过index和key进行查询
  • 通过for...in进行遍历
    for 变量 in set:
        # 获取集合元素
        print(变量)
    
  • 通过迭代器进行访问
    # 1. 生成一个迭代器
    变量 = iter(set)
    
    # 2. 通过迭代器取值
    # 2.1 使用next()函数获取迭代器元素 
    print(next(变量))
    print(next(变量))
    print(next(变量))
    .
    .
    .
    
    # 2.2 通过for...in获取迭代器元素
    for 变量 in 迭代器:
        # 获取迭代器的元素
        print(v)
    
    
    # 示例
    s = {'a', 'b', 'c', 1, 8, 3, 7}
    
    # 1. 创建迭代器
    ite = iter(s)
    
    # 2.1 通过next函数取迭代器中的元素
    # print(next(ite))
    # print(next(ite))
    # print(next(ite))
    # print(next(ite))
    # print(next(ite))
    # print(next(ite))
    # print(next(ite))
    
    # print(next(ite))  # 取值超出迭代器元素个数,会报错
    
    # 2.2 通过for...in获取迭代器中的元素
    for v in ite:
        print(v)
    

集合之间操作

交集
  • 通过intersection()方法
    分类
        对象方法
    作用
        获取集合对象与指定可迭代对象中相同的元素
    语法
        set.intersection(iterable)
    参数
        iterable:可迭代对象,内部元素只能是不可变类型
        字符串中的数字只能与集合中的字符串类型的数字为交集
        可迭代对象是字典,只会判断key
    返回值
        返回一个可变集合/不可变集合,元素为集合和可迭代对象都包含的元素(返回的集合类型与调用方法的对象类型一致)
    
    
    # 示例
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = {'a', 'b', 'c', 2, 4, 6, 9}
    
    print(s1.intersection(s2))      # --> {'b', 'a', 'c'}
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = 'abc123'
    
    print(s1.intersection(s2))      # --> {'b', 'a', 'c'}
    
    s3 = {'1', '2', 3, 'a','b','c'}
    s4 = 'abc123'
    print(s3.intersection(s4))      # --> {'b', 'c', 'a', '2', '1'}
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = {'a':1, 'b': 8, 'f':'c'}
    print(s1.intersection(s2))      # --> {'a', 'b'}
    
    
  • 通过&逻辑运算符
    • 注意:
    • &逻辑运算符只能对集合与集合求交集
    • 集合与字符串、列表、元组、字典通过&逻辑运算符求交集会报错
    set1 & set2
    
    # 示例
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = {'a', 'b', 'c', 2, 4, 6, 9}
    
    print(s1 & s2)  # --> {'b', 'a', 'c'}
    
    # -----以下操作均报错----
    # s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    # s2 = 'abc'
    # 
    # print(s1 & s2)  # --> TypeError: unsupported operand type(s) for &: 'set' and 'str'
    
    # s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    # s2 = ['a', 'b', 'c', 2, 4, 6, 9]
    # 
    # print(s1 & s2)  # --> TypeError: unsupported operand type(s) for &: 'set' and 'list'
    
    # s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    # s2 = ('a', 'b', 'c', 2, 4, 6, 9)
    # 
    # print(s1 & s2)  # --> TypeError: unsupported operand type(s) for &: 'set' and 'tuple'
    
    # s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    # s2 = {'a': 1, 'b': 8, 'f': 'c'}
    # print(s1 & s2)  # --> TypeError: unsupported operand type(s) for &: 'set' and 'dict'
    
  • 通过intersection_update()方法
    • 该方法只适用可变集合(set),不可变集合(frozenset)没有该方法
    分类
        对象方法
    作用
        获取集合对象与指定可迭代对象中相同的元素,并重新赋值给原集合对象
    语法
        set.intersection_update(iterable)
    参数
        iterable:可迭代对象,内部元素只能是不可变类型
        可迭代对象是字符串,只会判定非数字部分
        可迭代对象是字典,只会判断key
    返回值
        返回None,直接修改原集合对象
        由于是直接修改原集合对象,所以该方法只适用可变集合(set)
    
    
    # 示例
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = {'a', 'b', 'c', 4, 9}
    
    print(s1.intersection_update(s2))   # --> None
    print(s1)                           # --> {'c', 'b', 'a'}
    print(s2)                           # --> {'c', 4, 'a', 9, 'b'}
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = 'abcd1'
    
    print(s1.intersection_update(s2))   # --> None
    print(s1)                           # --> {'b', 'a', 'c'}
    print(s2)                           # --> abcd1
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = ['a', 'b', 'd', 2, 8, 6, 9]
    
    print(s1.intersection_update(s2))   # --> None
    print(s1)                           # --> {'b', 8, 'a'}
    print(s2)                           # --> ['a', 'b', 'd', 2, 8, 6, 9]
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = ('a', 'b', 'd', 2, 8, 6, 9)
    
    print(s1.intersection_update(s2))   # --> None
    print(s1)                           # --> {8, 'a', 'b'}
    print(s2)                           # --> ('a', 'b', 'd', 2, 8, 6, 9)
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = {'a': 2, 'b': 8, 'd': 'c'}
    
    print(s1.intersection_update(s2))   # --> None
    print(s1)                           # --> {'b', 'a'}
    print(s2)                           # --> {'a': 2, 'b': 8, 'd': 'c'}
    
  • 补充:可迭代对象内部元素只能是不可变类型原因
    • 在集合与可迭代对象求交集的时候,实际上是先将可迭代对象转换成集合,然后再求交集
    • 如果可迭代对象内部有可变类型,那么在转换成集合的时候就会报错
并集
  • 通过union()方法
    分类
        对象方法
    作用
        将指定可迭代对象的所有元素合并到集合中,并合并重复项
    语法
        set.union(iterable)
    参数
        iterable:可迭代对象
    返回值
        返回一个包含了所有元素的可变集合/不可变集合,返回的集合类型与调用方法的集合类型一致
        
    
    # 示例
    # s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = {'a', 'b', 'c', 4, 9}
    
    print(s1.union(s2))     # --> {1, 3, 4, 7, 'b', 8, 'c', 9, 'a'}
    print(s1)               # --> {1, 3, 7, 'b', 8, 'a', 'c'}
    print(s2)               # --> {4, 'b', 9, 'a', 'c'}
    
    s1 = frozenset(['a', 'b', 'c', 1, 8, 3, 7])
    s2 = {'a', 'b', 'c', 4, 9}
    
    print(s1.union(s2))     # --> frozenset({1, 3, 4, 7, 'b', 8, 'c', 9, 'a'})
    print(s1)               # --> frozenset({1, 3, 7, 'b', 'c', 8, 'a'})
    print(s2)               # --> {4, 'b', 9, 'a', 'c'}
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = 'abc13'
    
    print(s1.union(s2))     # --> {1, 3, 7, 8, '3', 'a', 'b', 'c', '1'}
    print(s1)               # --> {1, 3, 'c', 7, 8, 'a', 'b'}
    print(s2)               # --> abc13
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = ['a', 'b', 'd', 2, '8', 9, 7]
    
    print(s1.union(s2))     # --> {1, 2, 3, 7, 'a', 8, '8', 9, 'd', 'b', 'c'}
    print(s1)               # --> {1, 3, 'c', 7, 'a', 8, 'b'}
    print(s2)               # --> ['a', 'b', 'd', 2, '8', 9, 7]
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = {'a': 9, 'b': 'c', 'd': 2}
    
    print(s1.union(s2))     # --> {1, 3, 'a', 7, 8, 'd', 'b', 'c'}
    print(s1)               # --> {1, 3, 'b', 'a', 7, 8, 'c'}
    print(s2)               # --> {'a': 9, 'b': 'c', 'd': 2}
    
  • 通过|逻辑运算符
    • 注意:
    • |逻辑或算符只能对集合与集合求并集
    • 集合与字符串、列表、元组、字典通过|逻辑运算符求并集会报错
    set1 | set2
        
    
    # 示例
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = {'a', 'b', 'c', 4, 9}
    
    print(s1 | s2)          # --> {1, 'a', 3, 4, 7, 8, 9, 'b', 'c'}
    print(s1)               # --> {1, 'a', 3, 'c', 7, 8, 'b'}
    print(s2)               # --> {'a', 'c', 4, 9, 'b'}
    
    s1 = frozenset(['a', 'b', 'c', 1, 8, 3, 7])
    s2 = {'a', 'b', 'c', 4, 9}
    
    print(s1 | s2)          # --> frozenset({1, 3, 4, 'c', 7, 8, 9, 'a', 'b'})
    print(s1)               # --> frozenset({1, 3, 'c', 7, 8, 'a', 'b'})
    print(s2)               # --> {'b', 4, 'c', 9, 'a'}
    
    # -----以下运算会报错-----
    # s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    # s2 = 'abc13'
    #
    # print(s1 | s2)          # --> TypeError: unsupported operand type(s) for |: 'set' and 'str'
    # print(s1)
    # print(s2)
    
    # s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    # s2 = ['a', 'b', 'd', 2, '8', 9, 7]
    #
    # print(s1 | s2)          # --> TypeError: unsupported operand type(s) for |: 'set' and 'list'
    # print(s1)
    # print(s2)
    
    # s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    # s2 = {'a': 9, 'b': 'c', 'd': 2}
    # 
    # print(s1 | s2)          # --> TypeError: unsupported operand type(s) for |: 'set' and 'dict'
    # print(s1)
    # print(s2)
    
  • 通过update()方法
    • 该方法只适用可变集合(set),不可变集合(frozenset)没有该方法
    分类
        对象方法
    作用
        合并集合对象与指定可迭代对象中的元素,并合并重复项,重新赋值给原集合对象
    语法
        set.update(iterable)
    参数
        iterable:可迭代对象,内部元素只能是不可变类型
        可迭代对象是字符串,只会判定非数字部分
        可迭代对象是字典,只会判断key
    返回值
        返回None,直接修改原集合对象
        由于是直接修改原集合对象,所以该方法只适用可变集合(set)
        
        
    # 示例
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = {'a', 'b', 'c', 4, 9}
    
    print(s1.update(s2))    # --> None
    print(s1)               # --> {1, 3, 4, 7, 8, 9, 'c', 'a', 'b'}
    print(s2)               # --> {'c', 'a', 4, 9, 'b'}
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = 'adg69'
    
    print(s1.update(s2))    # --> None
    print(s1)               # --> {1, 3, 7, 8, 'a', 'd', 'c', '9', '6', 'b', 'g'}
    print(s2)               # --> adg69
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = ['a', 'b', 'd', 2, '8', 9, 7]
    
    print(s1.update(s2))    # --> None
    print(s1)               # --> {1, 2, 3, 7, 8, 'b', 9, 'c', 'a', 'd', '8'}
    print(s2)               # --> ['a', 'b', 'd', 2, '8', 9, 7]
    
    s1 = {'a', 'b', 'c', 1, 8, 3, 7}
    s2 = {'a': 9, 'b': 'c', 'd': 2}
    
    print(s1.update(s2))    # --> None
    print(s1)               # --> {1, 3, 7, 8, 'b', 'd', 'a', 'c'}
    print(s2)               # --> {'a': 9, 'b': 'c', 'd': 2}
    
差集
  • 通过difference()方法
    分类
        对象方法
    作用
        获取包含在集合中但不包含在可迭代对象中的元素
    语法
        set.difference(iterable)
    参数
        iterable:可迭代对象,内部元素只能是不可变类型
        如果可迭代对象是字典,只会判断key
    返回值
        返回一个可变集合或不可变集合,返回的集合类型与调用方法的集合对象类型一样
    
    # 示例
    s1 = {'a', 'b', 'c'}
    s2 = {'a', 'b', 'd'}
    
    print(s1.difference(s2))    # --> {'c'}
    print(s1)                   # --> {'a', 'b', 'c'}
    print(s2)                   # --> {'a', 'b', 'd'}
    
    s1 = {'a', 'b', 'c', '1', 2}
    s2 = 'a1df2'
    
    print(s1.difference(s2))    # --> {2, 'b', 'c'}
    print(s1)                   # --> {2, 'a', '1', 'b', 'c'}
    print(s2)                   # --> a1df2
    
    s1 = {'a', 'b', 'c', '1', 2}
    s2 = ['a', 1, '2', 'd']
    
    print(s1.difference(s2))    # --> {2, 'c', 'b', '1'}
    print(s1)                   # --> {2, 'c', 'b', 'a', '1'}
    print(s2)                   # --> ['a', 1, '2', 'd']
    
    s1 = {'a', 'b', 'c', '1', 2}
    s2 = {'a': 'b','c': 1, 'd': 2}
    
    print(s1.difference(s2))    # --> {'b', 2, '1'}
    print(s1)                   # --> {2, 'c', 'a', '1', 'b'}
    print(s2)                   # --> {'a': 'b', 'c': 1, 'd': 2}
    
  • 通过-运算符
    • 注意:
    • -运算符只能对集合与集合求差集
    • 集合与字符串、列表、元组、字典通过-逻辑运算符求交集会报错
    set1 - set2
    
    # 示例
    s1 = {'a', 'b', 'c'}
    s2 = {'a', 'b', 'd'}
    
    print(s1 - s2)              # --> {'c'}
    print(s1)                   # --> {'a', 'b', 'c'}
    print(s2)                   # --> {'a', 'b', 'd'}
    
    
    # -----以下运算会报错-----
    # s1 = {'a', 'b', 'c', '1', 2}
    # s2 = 'a1df2'
    #
    # print(s1 - s2)              # --> TypeError: unsupported operand type(s) for -: 'set' and 'str'
    # print(s1)
    # print(s2)
    #
    # s1 = {'a', 'b', 'c', '1', 2}
    # s2 = ['a', 1, '2', 'd']
    #
    # print(s1 - s2)              # --> TypeError: unsupported operand type(s) for -: 'set' and 'list'
    # print(s1)
    # print(s2)
    #
    # s1 = {'a', 'b', 'c', '1', 2}
    # s2 = {'a': 'b','c': 1, 'd': 2}
    # 
    # print(s1 - s2)              # TypeError: unsupported operand type(s) for -: 'set' and 'dict'
    # print(s1)
    # print(s2)
    
  • 通过difference_update()方法
    • 该方法只适用可变集合(set),不可变集合(frozenset)没有该方法
    分类
        对象方法
    作用
        获取包含在集合中但不包含在可迭代对象中的元素,并重新赋值给原集合
    语法
        set.difference_update(iterable)
    参数
        iterable:可迭代对象,内部元素只能是不可变类型
    返回值
        返回None,直接修改原集合对象
        由于是直接修改原集合对象,所以该方法只适用可变集合(set)
    
    
    # 示例
    s1 = {'a', 'b', 'c'}
    s2 = {'a', 'b', 'd'}
    
    print(s1.difference_update(s2))     # --> None
    print(s1)                           # --> {'c'}
    print(s2)                           # --> {'a', 'b', 'd'}
    
    # # 不可变集合frozenset没有difference_update()方法,会报错
    # s1 = frozenset(['a', 'b', 'c'])
    # s2 = {'a', 'b', 'd'}
    #
    # print(s1.difference_update(s2))     # --> AttributeError: 'frozenset' object has no attribute 'difference_update'
    # print(s1)
    # print(s2)
    
    
    s1 = {'a', 'b', 'c', '1', 2}
    s2 = 'a1df2'
    
    print(s1.difference_update(s2))     # --> None
    print(s1)                           # --> {2, 'c', 'b'}
    print(s2)                           # --> a1df2
    
    s1 = {'a', 'b', 'c', '1', 2}
    s2 = ['a', 1, '2', 'd']
    
    print(s1.difference_update(s2))     # --> None
    print(s1)                           # --> {2, 'c', 'b', '1'}
    print(s2)                           # --> ['a', 1, '2', 'd']
    
    s1 = {'a', 'b', 'c', '1', 2}
    s2 = {'a': 'b', 'c': 1, 'd': 2}
    
    print(s1.difference_update(s2))     # --> None
    print(s1)                           # --> {2, 'b', '1'}
    print(s2)                           # --> {'a': 'b', 'c': 1, 'd': 2}
    
判定
  • isdisjoint()判断集合与可迭代对象元素是否不相交
    分类
        对象方法
    作用
        判断集合与指定可迭代对象的元素是否不相交
    语法
        set1.isdisjoint(iterable)
    参数
        iterable:可迭代对象,元素是不可变类型
    返回值
        返回TrueFalse
        
    
    # 示例
    s1 = {'a', 'b', 'c'}
    s2 = {'a', 'b', 'd'}
    l2 = ['a', 'b', 'd']
    d2 = {'e':'a', 'f':'b', 'g':'d'}
    
    print(s1.isdisjoint(s2))        # --> False
    print(s1.isdisjoint(l2))        # --> False
    print(s1.isdisjoint(d2))        # --> True
    
  • issuperset()判断集合是否包含可迭代对象的所有元素
    分类
        对象方法
    作用
        判断集合是否包含可迭代对象的所有元素
        个人理解:判断集合是否是可迭代对象的父集合
    语法
        set.issuperset(iterable)
    参数
        iterable:可迭代对象,元素是不可变类型
        如果可迭代对象是字典,只会与key进行判断
    返回值
        返回TrueFalse
        
    
    # 示例
    s1 = {'a', 'b', 'c', 'd', 'e'}
    s2 = {'a', 'b', 'd', 'e'}
    s3 = ['a', 'b', 'c', 'f']
    s4 = {'a': 1, 'b': 2, 'c': 3}
    
    print(s1.issuperset(s2))        # --> True
    print(s1.issuperset(s3))        # --> False
    print(s1.issuperset(s4))        # --> True
    
  • issubset()判断一个集合是否包含于指定可迭代对象
    分类
        对象方法
    作用
        判断集合所有元素是否包含于指定可迭代对象
        个人理解:判断集合是否是可迭代对象的子集合
    语法
        set.issubset(iterable)
    参数
        iterable:可迭代对象,元素是不可变类型
        如果可迭代对象是字典,只会与key进行判断
    返回值
        返回TrueFalse
    
    
    # 示例
    s1 = {'a', 'b', 'c'}
    s2 = {'a', 'd', 'b', 'c', 'f'}
    s3 = ['a', 'b', 'f', 'c', 'g', 1, 2]
    s4 = {'a': 'b', 'c': 'd', 'e': 1}
    s5 = 'abc123'
    
    print(s1.issubset(s2))      # --> True
    print(s1.issubset(s3))      # --> True
    print(s1.issubset(s4))      # --> False
    print(s1.issubset(s5))      # --> True
    


推导式

列表推导式

  • 作用

    • 列表推导式可以通过一个可迭代对象快速的生成一个新列表
  • 语法

    # 格式一
    [表达式 for 变量 in 可迭代对象]
    
    # 格式二
    [表达式 for 变量 in 可迭代对象 if 条件]
    
    # 格式三
    [表达式1 if 条件 else 表达式2 for 变量 in 可迭代对象]
    
  • 示例

  • 格式一示例

    old_list = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
    
    new_list = [i[1] for i in old_list]
    
    print(new_list)         # [2, 5, 8]
    
  • 图解

    • 在这里插入图片描述
  • 格式二示例

    old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    
    new_list = [i ** 2 for i in old_list if i % 2 == 0]
    
    print(new_list)         # [4, 16, 36, 64, 100, 144, 196, 256, 324, 400]
    
    
    # 拆解 new_list = [i ** 2 for i in old_list if i % 2 == 0]
    
    # new_list = []
    
    # for i in old_list:
    #     if i % 2 == 0:
    #         new_list.append( i ** 2)
    
  • 图解

    • 在这里插入图片描述
  • 格式三示例

    old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    
    new_list = [i ** 2 if i % 2 == 0 else i * 0 for i in old_list ]
    
    print(new_list)         # [0, 4, 0, 16, 0, 36, 0, 64, 0, 100, 0, 144, 0, 196, 0, 256, 0, 324, 0, 400]
    
    
    # 拆解 new_list = [i ** 2 if i % 2 == 0 else i * 0 for i in old_list ]
    
    # new_list = []
    # 
    # for i in old_list:
    #     if i % 2 == 0:
    #         new_list.append(i ** 2)
    #     else:
    #         new_list.append(i * 0)
    
  • 图解

    • 在这里插入图片描述
  • 理解

  • 由于最终生成的是一个列表,所以可以先写一个列表

    new_list = []
    
  • 然后再在这个列表内部写推导式

    old_list = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
    
    new_list = [i[1] for i in old_list]
    
    print(new_list)         # [2, 5, 8]
    

集合推导式

  • 与列表推导式的区别就是将[]替换成{}
  • 语法
    # 格式一
    {表达式 for 变量 in 可迭代对象}
    
    # 格式二
    {表达式 for 变量 in 可迭代对象 if 条件}
    
    # 格式三
    {表达式1 if 条件 else 表达式2 for 变量 in 可迭代对象}
    
  • 示例
  • 示例一
    old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    
    new_set = {i * 2 for i in old_list}
    
    print(new_set)          # {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40}
    
  • 示例二
    old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    
    new_set = {i ** 2 for i in old_list if i % 2 == 0}
    
    print(new_set)          # {64, 256, 100, 4, 36, 196, 324, 16, 144, 400}
    
  • 示例三
    old_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    
    new_set = {i ** 2 if i % 2 == 0 else i * 0 for i in old_list}
    
    print(new_set)          # {0, 64, 256, 4, 36, 100, 196, 324, 16, 144, 400}
    
    # 由于集合是一个无序且不可重复的元素集合,所以输出结果中只有一个0,且并未根据old_list元素的顺序生成
    

字典推导式

  • 可以根据特定的条件或逻辑快速生成一个新的字典,同时也可以对已有的字典进行修改和过滤
  • 语法
    # 格式一
    {key: value for 变量 in 可迭代对象}
    
    # 格式二
    {key: value for 变量 in 可迭代对象 if 条件}
    
    # 格式三
    {key: value1 if 条件 else value2 for 变量 in 可迭代对象}
    
  • 示例
  • 示例一
    old_list = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    
    new_dic = {i[0]: i[1] for i in old_list}
    
    print(new_dic)          # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    
  • 示例二
    old_list = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    
    new_dic = {i[0]: i[1] for i in old_list if i[1] % 2 == 0}
    
    print(new_dic)          # {'b': 2, 'd': 4}
    
  • 示例三
    old_list = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    
    new_dic = {i[0]: i[1] if i[1] % 2 ==0 else i[1]**2 for i in old_list}
    
    print(new_dic)          # {'a': 1, 'b': 2, 'c': 9, 'd': 4}
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值