Python内蔵データ構造-集合set

24872 ワード

集合の定義
  • 集合は高校数学の概念
  • である.
  • は、要素
  • と呼ばれる決定された無秩序な一意のデータの山である.
  • インデックスとスライスを使用できません(無秩序のため)
  • データは一意性を有し、重量排出(重複除外)
  • に使用することができる.
  • セットの内部データには、str、int、float、tuple、凍結セット(frozen set)などのハッシュ可能なデータしか配置できません.
  • では、空の集合
  • をカッコで定義できません.
    コレクションのアクション
  • メンバー検出:in,not in
  • #     
    # in, not in 
    
    s = {3,54,"i", "love", "you"}
    #           ,print             
    print(s)
    
    if "love" in s:
        print(" ")
    
    if "haha" not in s:
        print("not found")
    
  • forサイクル
  • # for  
    s = {3,54,"i", "love", "you"}
    for i in s:
        print(i, end = " ")
    
    #           
    #          
    s = {(1,2,3),('a','b','c'),("I","love", "you")}
    
    for k,l,m in s:
        print(k,"--",l,"--",m)
    for k in s:
        print(k)
    
  • 集合の内包
  • #        
    #                   
    s = {2,3,3,4,23,234,34,2,33,3,3,33,3,33,1,2,33,4}
    print(s)
    
    #         
    s = {2,3,3,4,23,234,34,2,33,3,3,33,3,33,1,2,33,4}
    #   s       
    ss = {i for i in s if i % 2 == 0}
    print(s)
    print(ss)
    
    #         
    
    s1 = {1,2,3,4}
    s2 = {"i", "love","wangwang"}
    
    #         for  
    # for m in s1:
    #    for n in s2:
    #         m*n   s    
    s = {m*n for m in s1 for n in s2}
    print(s)
    
    #             ,        
    #         for  
    # for m in s1:
    #    for n in s2:
    #        if n ==2:
    #             m*n   s    
    print("*" * 20)
    s = {m*n for m in s1 for n in s2 if m ==2}
    print(s)
    

    集合内部関数
  • add:集合にデータaddを追加し、集合に順序がないことに注意するため、appendとinsertメソッド
  • はありません.
  • clear:
  • をその場でクリア
  • copy:新しいセット
  • をコピーして生成
  • remove:指定した値を削除します.削除した値が存在しない場合は、
  • とエラーが発生します.
  • discard:コレクションで指定する値を除去し、指定した値が存在しない場合は
  • を誤報しない.
  • pop:要素を削除し、ハッシュシーケンス順に左から
  • を削除する.
    #add:         ,         ,    append insert  
    s = {1}
    s.add(333)
    print(s)
    
    # copy   
    # clear     
    s = {1,2,3,4}
    print(id(s))
    s.clear()
    
    print(id(s))
    print(s)
    
    # discard:         ,         ,   
    s = {2,3,4,6,8,3}
    s.discard(2)
    print(s)
    
    print("*" * 30)
    s.discard(100)
    print(s)
    
    # remove:      ,         ,  
    # s.remove(100)   #     
    print(s)
    # pop:              
    s = {'a','b','c',1,2,3,4,5,6}
    print(s)
    
    s.pop()
    print(s)
    s.pop()
    print(s)
    s.pop()
    print(s)
    
    print("*" * 20)
    s = {('a','b'),('c','d'),('e','f')}
    print(s)
    
    s.pop()
    print(s)
    s.pop()
    print(s)
    s.pop()
    print(s)
    

    実行結果:{1,333}77023944 77023944 set(){3,4,6,8}
    {3, 4, 6, 8} {3, 4, 6, 8} {1, 2, 3, ‘b’, 4, 5, ‘c’, 6, ‘a’} {2, 3, ‘b’, 4, 5, ‘c’, 6, ‘a’} {3, ‘b’, 4, 5, ‘c’, 6, ‘a’} {‘b’, 4, 5, ‘c’, 6, ‘a’}
    {‘bbbb’, ‘cccc’, ‘dddd’, ‘aaa’} {‘cccc’, ‘dddd’, ‘aaa’} {‘dddd’, ‘aaa’} {‘aaa’} {(‘c’, ‘d’), (‘a’, ‘b’), (‘e’, ‘f’)} {(‘a’, ‘b’), (‘e’, ‘f’)} {(‘e’, ‘f’)} set()
    2つの集合の数学的操作
  • セットはサポートされていません+-
  • intersection:交差
  • difference:差分
  • unionn:並列
  • issubset:1つのセットが別のセットのサブセットであるかどうかをチェックする
  • issuperset:1つのセットが別のセットのスーパーセットであるかどうかを確認する
  • #          
    s1 = {1,2,3,4,5,6}
    s2 = {5,6,7,8,9}
    
    # intersection:   
    #s1 s2     
    print(s1.intersection(s2))
    print(s2.intersection(s1))
    
    # difference:   
    #s1   s2   ,     
    print(s1.difference(s2))
    #s2   s1    ,     
    print(s2.difference(s1))
    
    # unionn:   ,         ,    
    print(s1.union(s2))
    
    
    # issubset:                 
    print(s1.issubset(s2))
    
    #     a       b   ,   a        b    ,issubset,  a b   ,  b a   
    print("*" * 20)
    s3 = {2,3}
    print(s3.issubset(s1))
    print(s1.issuperset(s3))
    

    出力結果:{5,6}{5,6}{1,2,3,4}{8,9,7}{1,2,3,4,5,6,7,8,9}False
    True True
    凍結集合(frozen set)
  • 要素のセット
  • は変更できません.
  • 集合listとフリーズ集合(frozen set)の関係は、リストlistとメタグループtupleの関係
  • に類似する.
    #       
    s = frozenset()
    print(type(s))
    
    s1 = {1,2,3,4,5,6}
    s2 = frozenset(s1)
    print(type(s2))