zoukankan      html  css  js  c++  java
  • 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'>
  • 相关阅读:
    作用域随笔
    关于取数组地址的识记(&s+1,s+1,&s[0]+1)
    c中关于#与##的简易使用
    Qt Creator的配置
    sizeof对int long double char的使用
    i++与++i的区别
    for循环执行顺序
    gcc 编译的4个过程简单识记
    各进制之间转化识记
    删除临时文件
  • 原文地址:https://www.cnblogs.com/shaopan/p/9932343.html
Copyright © 2011-2022 走看看