• python 数据结构--Set(集合)


    • 集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
    • 基本功能是进行成员关系测试和删除重复元素。
    • 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

    1. 创建集合

    student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
    print(student)   # 输出集合,重复的元素被自动去掉
    
    {'Jim', 'Rose', 'Mary', 'Jack', 'Tom'}
    

    2. 判断元素是否在集合中

    # 成员测试
    if 'Rose' in student :
        print('Rose 在集合中')
    else :
        print('Rose 不在集合中')
    
    Rose 在集合中
    

    3.集合运算

    # set可以进行集合运算
    a = set('abracadabra')
    b = set('alacazam')
     
    print(a)
     
    print(a - b)     # a 和 b 的差集
     
    print(a | b)     # a 和 b 的并集
     
    print(a & b)     # a 和 b 的交集
     
    print(a ^ b)     # a 和 b 中不同时存在的元素
    
    {'a', 'd', 'r', 'b', 'c'}
    {'b', 'd', 'r'}
    {'l', 'm', 'r', 'a', 'd', 'z', 'b', 'c'}
    {'a', 'c'}
    {'l', 'm', 'r', 'b', 'd', 'z'}
    
    a = set('abracadabra')
    b = set('alacazam')
     
    print(a)
    print(b)
    a|b
    
    {'a', 'd', 'r', 'b', 'c'}
    {'l', 'm', 'a', 'z', 'c'}
    {'a', 'b', 'c', 'd', 'l', 'm', 'r', 'z'}
    

    4.集合判空

    a = {1,2,3,4,5}
    if len(a)!= 0:
        print("集合不为空")
    else:
        print("集合为空")
    
    集合不为空
    
    # 不推荐此种方法判断
    a = {1,2,3,4,5}
    if not a:
        print("集合空")
    else:
        print("集合不为空")
    
    集合不为空
    

    5.集合练习

    建立以下两个集合并按要求操作

    • a=set([1,2,3,4,5])
    • b=set([2,4,6,8,10])
    • 求并、交、差、异或、子集
    • 求添加、删除、是否空集
    a = set([1,2,3,4,5])
    b = set([2,4,6,8,10])
    print(a)
    print(b)
    print(a | b)  #并集
    print(a & b)  #交集
    print(a - b)  #差
    print(a ^ b)  #异或
    print(f"a 是 b 的子集吗:{a.issubset(b)}")  
    print(f"b 是 a 的子集吗:{a.issuperset(b)}" ) 
    c = set([1,2,3])
    print(f"c 是 a 的子集吗:{c.issubset(a)}")  
    print(f"c 是 a 的子集吗:{a.issuperset(c)}") 
    
    # 添加
    a.add(6)
    a.add(7)
    a.add(8)
    a.add(9)
    print(a)
    
    # 删除
    a.remove(9)
    print(a)
     
    # 判断集合为空
    if len(a)==0:
        print("集合为空。")
    else:
        print("集合不为空。")
    
    {1, 2, 3, 4, 5}
    {2, 4, 6, 8, 10}
    {1, 2, 3, 4, 5, 6, 8, 10}
    {2, 4}
    {1, 3, 5}
    {1, 3, 5, 6, 8, 10}
    a 是 b 的子集吗:False
    b 是 a 的子集吗:False
    c 是 a 的子集吗:True
    c 是 a 的子集吗:True
    {1, 2, 3, 4, 5, 6, 7, 8, 9}
    {1, 2, 3, 4, 5, 6, 7, 8}
    集合不为空。
    

    6. 集合的应用实例--推荐电影

    # 推荐电影
    from random import randrange
    
    # 其它用户喜欢看的电影清单
    data = {"user"+str(i):{"film"+str(randrange(1,10)) for j in range(randrange(15))} for i in range(10)}
    
    #待测用户看过的电影
    user = {"film1","film2","film3"}
    
    # 查找与待测用户最相似的用户和他喜欢看的电影
    similarUser, films = max(data.items(), key=lambda item: len(item[1]&user))
    
    print("历史数据")
    for u, f in data.items():
        print(u, f, sep=":")
    print("和您最相似的用户是:", similarUser)
    print("Ta 最喜欢看的电影是:",films)
    print("Ta 看过的电影您没看过的有:",films - user)
    
    
    历史数据
    user0:{'film9', 'film1', 'film7'}
    user1:{'film5', 'film1', 'film3', 'film7'}
    user2:{'film2'}
    user3:{'film9', 'film2', 'film5', 'film4', 'film8', 'film1', 'film3'}
    user4:{'film6', 'film9', 'film2', 'film4', 'film8', 'film1', 'film3'}
    user5:set()
    user6:{'film2'}
    user7:{'film4', 'film9', 'film1', 'film2'}
    user8:{'film6', 'film9', 'film2', 'film5', 'film4', 'film3', 'film7'}
    user9:{'film2', 'film3', 'film5'}
    和您最相似的用户是: user3
    Ta 最喜欢看的电影是: {'film9', 'film2', 'film5', 'film4', 'film8', 'film1', 'film3'}
    Ta 看过的电影您没看过的有: {'film4', 'film9', 'film8', 'film5'}
  • 相关阅读:
    软件工程概论作业二 电梯调度思路 信1205班 刘权毅 董文轩
    软件工程概论作业一 信1205班 20122561 董文轩
    团队开发第三天(董文轩,苏康奖,常晓杨,刘权毅,刘梦辉,刘若凡)
    软件工程概论作业三 信1205班 董文轩 刘权毅
    IDEA 搭建spring+maven+mybatis+mysql+junit+log4j2
    什么时候需要实现序列化Serializable
    IDEA如何查看maven依赖冲突
    Docker for windows : 安装linux
    Mybatis 分页
    POI java操作OFFICE产品
  • 原文地址:https://www.cnblogs.com/sinlearn/p/12665410.html
Copyright © 2020-2023  润新知