zoukankan      html  css  js  c++  java
  • Python—数据类型之集合(Set)

    1.集合是一个无序的,且不重复元素的集合。它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。

    2.基本功能包括关系测试和消除重复元素。注意:集合存在的意义就是去重和关系运算。

    • 去重,把一个列表变成集合,就自动去重了。
    • 关系测试,测试两组数据之前的交集、差集、并集等关系。

    3.集合中的三个特征

    • 确定性(元素必须是可hash)
    • 互异性(去重)
    • 无序性(集合中的元素没有先后之分)如集合{1,2,3}和集合{2,3,1}算作一个集合

    集合的创建

    可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。大括号也不可以创建元素含有字典与列表的集合。

    创建set需要一个list或者tuple或者dict作为输入集合。其中重复元素在set中会自动过滤。

    集合可以通过可迭代对象(字符串、元组、列表等)进行创建;集合中的元素不可重复;集合中的元素无序排列。

    创建空的集合:s = set(),不能用 { } 来创建空集合。

    创建非空集合:s = {1,2,3,4},或者 s = set(iterable)。

    # 创建空集合
    set1 = set()
    print(set1, type(set1))      # (set([]),  <type 'set'>)
     
    # 创建非空集合
    set1 = {1, 2, 2}
    print(set1, type(set1))      # (set([1, 2]),  <type 'set'>)
    set2 = set({1, 2, 2})
    print(set2, type(set2))      # (set([1, 2]),  <type 'set'>)
    set3 = set('abcdefabcd')
    set4 = set(['a','b','c','a'])
    set5 = set(('a','b','c','a'))
    set6 = set({'a':1, 'b':2})
    set7 = set(range(1, 10, 3))
    print(set3, type(set3))      # (set(['a', 'c', 'b', 'e', 'd', 'f']),  <type 'set'>)
    print(set4, type(set4))      # (set(['a', 'c', 'b']),  <type 'set'>)
    print(set5, type(set5))      # (set(['a', 'c', 'b']),  <type 'set'>)
    print(set6, type(set6))      # (set(['a', 'b']),  <type 'set'>)
    print(set7, type(set7))      # (set([1, 4, 7]),  <type 'set'>)
     
    # 集合推导式
    set1 = {x for x in 'abracdabra' if x not in 'abc'}
    print(set1, type(set1))      # (set(['r', 'd']),  <type 'set'>)
    

    集合的常用方法:见help(set)

    添加元素

    set1 = {'1', '2'}
    set2 = {'1', '2'}
    set3 = {'1', '2'}
    
    set1.add('3')          # add的作用相当于列表中的append方法,但是添加新元素时,如果存在就不添加。
    print set1             # set(['1', '3', '2'])
    
    set2.update('2345')     # update 类似于列表中的extend方法,update方法可以支持同时传入多个参数
    print set2              # set(['1', '3', '2', '5', '4'])
    
    set3.update(['6', '8'], 'de')  # 添加列表到集合,列表元素会被分解为单个元素后添加到集合
    print set3                     # set(['e', 'd', '1', '2', '6', '8'])
    

    删除元素

    s1 = set(['Python','Java','C','C++','C#'])
    s2 = set(['Python','Java','C','C++','C#'])
    s3 = set(['Python','Java','C','C++','C#'])
    
    s1.remove('C++')     # 使用remove(element)方法删除指定元素,参数element为需要删除的元素。如果集合中不存在element元素,则会抛出异常。
    s2.discard('C++')    # 使用discard(element)方法删除指定元素,参数element为需要删除的元素。如果集合中不存在element元素,不会抛出异常。
    print s1      # set(['Python', 'C#', 'C', 'Java']) 
    print s2      # set(['Python', 'C#', 'C', 'Java']) 
    
    print s3.pop()      # Python  随机删除一个元素。由于集合是无序的,pop返回的结果不能确定,且当集合为空时调用pop会抛出KeyError错误。
    print s3            # set(['C#', 'C', 'Java', 'C++'])
    
    s3.clear()    # 清空集合
    print s3      # set([])
    del s3        # 删除整个集合:del set
    print s3      # NameError: name 's3' is not defined
    

    查找元素

    s1 = set(['Python','Java','C','C++','C#'])
    for i in s1:
        print i
    

    集合的运算

    交集、并集、补集、差集、子集、超集

    in /not in运算符:in等同于字典的in,用于集合中,当某个值存在于集合中,返回True,否则返回False。not in 与in 返回值相反。集合的in / not in 运算符的速度快于序列。

    s1 = {1, 2, 3}    
    s2 = {3, 4, 5}
    
    # 交集 & 或者 intersection()
    print s1 & s2              # {3}
    print s1.intersection(s2)  
    
    # 并集 | 或者 union()
    print s1 | s2              # {1, 2, 3, 4, 5}
    print s1.union(s2)
    
    # 补集(反交集) ^ 或者 symmetric_difference()
    print s1 ^ s2              # {1, 2, 4, 5}
    print s1.symmetric_difference(s2)
    
    # 差集 - 或者 difference()
    print s1 - s2              # {1, 2}
    print s1.difference(s2)
    
    # 超集>:判断一个集合是另一个集合的超集,使用 >= 也可以
    print {1,2,3} > {1,2}      # True  {1,2,3} 是 {1,2} 的超集
    print {1,2,3}.issuperset({1,2})
    
    # 子集<:判断一个集合是另一个集合的子集,使用 <= 也可以
    print {1,2} < {1,2,3}      # True  {1,2} 是 {1,2,3} 的子集
    print {1,2}.issubset({1,2,3})
    
    print {1,2,3} == {3,2,1}   # True
    print {1,2,3} != {3,2,1}   # False
    
    print 1 in {1,2,3}         # True
    print 1 not in {1,2,3}     # False
    

    集合的函数

    len(x)  max(x)  min(x)  sum(x)  any(x)  all(x)

    s1 = {1, 2, 3, 6}    
    print len(s1)      # 4
    print max(s1)      # 6
    print min(s1)      # 1
    print sum(s1)      # 12
    print any(s1)      # True
    print all(s1)      # True
    

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

    arry = [1, 2, 3, 4, 6, 3, 8, 2]
    
    set1 = set(arry)
    print set1      # {1, 2, 3, 4, 6, 8}
    arry = list(set1)
    print arry      # [1, 2, 3, 4, 6, 8]
    

      

  • 相关阅读:
    Python 学习日记 第七天
    Python 学习日记 第六天
    Python 学习日记 第五天
    Python 学习日记 第四天
    Redis 中的数据类型及基本操作
    Asp.net mvc 中View 的呈现(二)
    Asp.net mvc 中View的呈现(一)
    Asp.net mvc 中Action 方法的执行(三)
    Asp.net mvc 中Action 方法的执行(二)
    Asp.net mvc 中Action 方法的执行(一)
  • 原文地址:https://www.cnblogs.com/liuhaidon/p/12122956.html
Copyright © 2011-2022 走看看