• Python 数据类型之 集合 set


    ####集合

    集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。以下是集合最重要的两点:

    1.去重,把一个列表变成集合,就自动去重了。

    2.关系测试,测试两组数据之前的交集、差集、并集等关系。

    #创建集合

    ##创建集合
    set1 = set({1,2,3})
    print(set1)
    set2 = {1,2,3,[1,2],{"name":"span"}}#集合里的元素必须是不可变数据类型
    print(set2)
    
    >>>{1, 2, 3}
    >>>TypeError: unhashable type: 'list'

    ##在集合中增加元素:#在集合中增加元素set.add() ;set.update()

    #在集合中增加元素set.add()  set.update()
    set3 = {"span","金融","Fore"}
    set3.add("量化交易")
    print(set3)
    set3.update("量化交易") #迭代地添加
    print(set3)
    >>>{'span', '金融', '量化交易', 'Fore'}
    >>>{'', '', '量化交易', 'Fore', '', 'span', '金融', ''}

    ###删除集合的元素

    #set.pop()随机删除

    #删除,set.pop()  随机地删除
    set4 = {"span","金融","Fore"}
    set4.pop()
    print(set4)
    >>>{"span","Fore"}

    #set.remove() 按元素删除

    # set.remove() 按元素删除
    set4 = {"span","金融","Fore"}
    set4.remove("span") #按元素删除,没有会报错
    print(set4)
    >>>{'Fore', '金融'}

    #set.clear() 清空集合 返回set()

    set5 = {"span","金融","Fore"}
    set5.clear()
    print(set5)
    >>>set()  ##因为空字典的返回类型是{},因此空集合的返回类型是set()

    ##删除整个集合 del set

    # del 删除
    set6 = {"span","金融","Fore"}
    del set6
    print(set6)
    
    >>>NameError: name 'set6' is not defined
    #查找集合中的元素 由于集合数据类型没有顺序不能采用索引及切片,并且也没有键值对
    #因此只能采用for 循环来进行查找
    #查找集合中的元素 由于集合数据类型没有顺序不能采用索引及切片,并且也没有键值对
    #因此只能采用for 循环来进行查找
    set7 = {"span","金融","Fore"}
    for i in set7:
        print(i)
    >>>
    金融
    span
    Fore

    ######################################################################################################################################

    集合的特别之处在于可以求集合的交集、并集、补集(反交集)

    #交集 & 或者 intersection()

    #集合的交集
    set1 = {1,2,3,4,5,6,7,8}
    set2 = {4,5,6,9,10}
    print(set1 & set2)
    print(set1.intersection(set2))
    >>>{4, 5, 6}
    >>>{4, 5, 6}

    #并集 |   或者 union()

    # 并集
    set1 = {1,2,3,4,5,6,7,8}
    set2 = {4,5,6,9,10}
    print(set1 | set2)
    print(set1.union(set2))
    
    >>>{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    >>>{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

    ##补集(反交集) ^ 或者 symmetric_difference()

    ##补集
    set1 = {1,2,3,4,5,6,7,8}
    set2 = {4,5,6,9,10}
    print(set1 ^ set2)
    print(set1.symmetric_difference(set2))
    >>>{1, 2, 3, 7, 8, 9, 10}
    >>>{1, 2, 3, 7, 8, 9, 10}

    #差集- 或者 difference

    #差集
    set1 = {1,2,3,4,5,6,7,8}
    set2 = {4,5,6,9,10}
    print(set1 - set2) # set1中独有的而set2中没有的
    print(set1.difference(set2))
    
    >>>{1, 2, 3, 7, 8}
    >>>{1, 2, 3, 7, 8}

    ##包含关系 子集合 

    set1 = {1,2,3,4,5,6,7,8}
    set2 = {4,5,6,}
    print(set1 > set2) # set1包含set2,set2 是set1的子集; set1是 set2的超集
    print(set2.issubset(set1))
    >>>True
    >>>True

    ###超集

    set1 = {1,2,3,4,5,6,7,8}
    set2 = {4,5,6,}
    print(set2 < set1) # set1包含set2,set1 是set2的超集
    print(set1.issuperset(set2))
    >>>True
    >>>True

    ######

    ##补充:集合数据类型可以去重

    # 去重
    li = [1,2,3,4,33,3,88,2]
    set1= set(li)
    print(set1)
    li = list(set1)
    print(li)
    >>>{1, 2, 3, 4, 33, 88}
    >>>[1, 2, 3, 4, 33, 88]
    #集合数据类型是可变数据类型,frozenset()是不可变数据类型
    s = frozenset("span")
    print(s,type(s))
    >>>frozenset({'a', 's', 'n', 'p'}) <class 'frozenset'>
  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/shaopan/p/9932343.html
Copyright © 2020-2023  润新知