Python学习笔记day09,元组,Python集合set,集合方法,集合推导式

  • 集合(set)
        • 创建空的集合
        • 创建非空的集合
        • 集合的构造函数
        • 集合的运算符号
        • in / not in 运算
        • 用于集合的方法
          • 集合练习题
          • 答案
        • 集合推导式
        • 固定集合

集合(set)

  1. 集合是可变的容器
  2. 集合内的数据对象都是唯一的(不能重复的)
  3. 集合内部是无序的存储结构,集合中的数据没有先后关系
  4. 集合内的元素必须是不可变对象
  5. 集合是可迭代对象

创建空的集合

  • set()

创建非空的集合

  • s = set("aabbcc")
  • s = {2,3,4,5,6}

集合的构造函数

  • set() 创建一个空的集合(不能用{}来创建)
  • set(iterable)用可迭代对象创建一个新的集合
  • 示例:

    s = set()       # s = { }
    s = {2,3,4,5,6}  # s = {2,3,4,5,6}
    s = set("abc")  # s = {'a', 'b', 'c'}
    s = set("aabbcc")   # s = {'a', 'b', 'c'}   --->集合内不能重复
    s = set( { 1:'1',  2:'2',  3:'3' })         # s = {1,2,5}
    s = set( ("abc", "123", True ) )            # s = { "abc", "123", True }
    s = set( { 1:2 }, { 1:'1'} )        # 错误,集合内都是不可变对象
    s = set( [1,2,3], ['a', 'a', 'c'] )     # 错误,集合内都是不可变对象

集合的运算符号

符号 含义 示例说明:s1 = {1,2,3} ; s2 = {2,3,4}
& 交集 s1 & s2 = { 2 , 3 }
\| 并集 s1 \| s2 = { 1, 2, 3, 4 }
- 补集 s1 - s2 = { 1 }
^ 对称补集 s1 - s2 = { 1, 4 }
< 子集 判断一个集合是另一个集合的子集(小学知识略
> 超集 判断一个集合是另一个集合的超集(小学知识略
== 相同 判断两个集合是否相同小学知识略
!= 不等于 小学知识略
>=,<= 大小于等于 小学知识略

in / not in 运算

  • 和字典、列表使用in运算的方法一致

    函数 说明
    len(x) 返回集合的长度
    max(x) 返回集合中最大的数
    min(x) 返回集合中最小的数
    sum(x) 返回集合中所有元素的和
    any(x) 真值测试,判断集合中是否有真值
    all(x) 真值测试,集合中所有元素为真,返回真

用于集合的方法

方法 说明
S.add(e) 在集合中添加一个新的元素e;如果元素已经存在,则不添加
S.remove(e) 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError错误
S.discard(e) 从集合S中移除一个元素e
S.clear() 清空集合内的所有元素
S.copy() 将集合进行一次浅拷贝
S.pop() 从集合S中删除一个随机元素;如果此集合为空,则引发KeyError异常
S.update(s2) Ss2得到的全集更新变量S
集合练习题

经理有:曹操、刘备、孙权
技术人员:曹操、孙权、张飞、关羽
用集合求出:
1. 即是经理又是技术人员的有谁?
2. 是经理,但不是技术人员的有谁?
3. 是技术人员,但不是经理的有谁?
4. 张飞是经理吗?
5. 身兼一职的人有谁?
6. 经理和技术人员一共有几个人?

答案
    jingli = set(("曹操","刘备","孙权"))
    jishu = set(("张飞","刘备","孙权","关羽"))
    print("即是经理又是技术人员的有:",','.join(jingli&jishu))         # 即是经理又是技术人员的有: 孙权,刘备
    print("是经理,但不是技术人员的有:",','.join(jingli-jishu))       # 是经理,但不是技术人员的有: 曹操
    print("是技术人员,但不是经理的有:",','.join(jishu-jingli))       # 是技术人员,但不是经理的有: 关羽,张飞
    print("张飞 %s 经理"%( "是" if "张飞" in jingli else "不是"))    # 张飞 不是 经理
    print("身兼一职的人有:",','.join(jingli^jishu))                  # 身兼一职的人有: 张飞,关羽
    print("经理和技术人员一共有%d个"%len(jingli|jishu))               # 经理和技术人员一共有5个

集合推导式

  • { x for x in set_list [ if 表达式 ]}
    用法和列表推导式,字典推导式是一样的,详细看我的上一篇文章

固定集合

固定集合是不可变的,无序的,含有唯一的元素的集合

  • 作用
  • 固定集合的构造函数 frozenset(iterable)
    1. frozenset( ( 1, 2, 3, 4) )
    2. frozenset( [ frozenset(( 1, 2, 3, 4)), 5, 6 ] ) 可以嵌套
  • 固定集合的运算
    运算:和一般的集合
    方法相当于 集合的全部方法 去掉修改集合的方法

你可能感兴趣的:(Python)