Python内蔵データ構造-集合set
24872 ワード
集合の定義集合は高校数学の概念 である.は、要素 と呼ばれる決定された無秩序な一意のデータの山である.インデックスとスライスを使用できません(無秩序のため) データは一意性を有し、重量排出(重複除外) に使用することができる.セットの内部データには、str、int、float、tuple、凍結セット(frozen set)などのハッシュ可能なデータしか配置できません. では、空の集合 をカッコで定義できません.
コレクションのアクションメンバー検出:in,not in forサイクル 集合の内包
集合内部関数 add:集合にデータaddを追加し、集合に順序がないことに注意するため、appendとinsertメソッド はありません. clear: をその場でクリア copy:新しいセット をコピーして生成 remove:指定した値を削除します.削除した値が存在しない場合は、 とエラーが発生します. discard:コレクションで指定する値を除去し、指定した値が存在しない場合は を誤報しない. pop:要素を削除し、ハッシュシーケンス順に左から を削除する.
実行結果:{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つのセットが別のセットのスーパーセットであるかどうかを確認する
出力結果:{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の関係 に類似する.
コレクションのアクション
#
# 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
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: , , 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つの集合の数学的操作
#
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)
#
s = frozenset()
print(type(s))
s1 = {1,2,3,4,5,6}
s2 = frozenset(s1)
print(type(s2))