Datawhaleオープンソース学習ライブラリから転載
https://github.com/datawhalechina/team-learning-program/tree/master/PythonLanguage
セットする
Pythonの、set
とdict
のような、だけでなく、セットkey
、コレクションのではなく、保存されましたvalue
。key
繰り返すことができないためset
、key
。には繰り返しはありません。
これkey
は不変の型、つまりハッシュ値であることに注意してください。
【例】
num = {
}
print(type(num)) # <class 'dict'>
num = {
1, 2, 3, 4}
print(type(num)) # <class 'set'>
1.コレクションの作成
- 最初にオブジェクトを作成してから、要素を追加します。
- 空の辞書が作成される
s = set()
ためs = {}
、空のセットを作成する場合にのみ使用できます。
【例】
basket = set()
basket.add('apple')
basket.add('banana')
print(basket) # {'banana', 'apple'}
- 一連の要素を中括弧で直接囲みます
{元素1, 元素2, ..., 元素n}
。 - 繰り返される要素
set
は、で自動的にフィルタリングされます。
【例】
basket = {
'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket) # {'banana', 'apple', 'pear', 'orange'}
set(value)
ファクトリ関数を使用して、リストまたはタプルをセットに変換します。
【例】
a = set('abracadabra')
print(a)
# {'r', 'b', 'd', 'c', 'a'}
b = set(("Google", "Lsgogroup", "Taobao", "Taobao"))
print(b)
# {'Taobao', 'Lsgogroup', 'Google'}
c = set(["Google", "Lsgogroup", "Taobao", "Google"])
print(c)
# {'Taobao', 'Lsgogroup', 'Google'}
【例】リスト内の重複要素を削除する
lst = [0, 1, 2, 3, 4, 5, 5, 3, 1]
temp = []
for item in lst:
if item not in temp:
temp.append(item)
print(temp) # [0, 1, 2, 3, 4, 5]
a = set(lst)
print(list(a)) # [0, 1, 2, 3, 4, 5]
結果から、セットの2つの特性が見つかりました。順序付けされていないものと一意のものです。
以来、set
我々は、インデックスまたはスライスの収集を行う(スライス)動作、及び無キー(鍵)を作成することができないので、ストレージの順序付けられていないコレクション、コレクション内の要素の値を取得するために使用することができ、しかしの要素かどうかを決定することができますコレクション。
2.コレクションの値にアクセスします
len()
組み込み関数を使用して、コレクションのサイズを取得できます。
【例】
s = set(['Google', 'Baidu', 'Taobao'])
print(len(s)) # 3
for
コレクション内のデータを1つずつ読み取ることができます。
【例】
s = set(['Google', 'Baidu', 'Taobao'])
for item in s:
print(item)
# Baidu
# Google
# Taobao
- 要素がコレクションにすでに存在するかどうかを渡す
in
かnot in
判断できます
【例】
s = set(['Google', 'Baidu', 'Taobao'])
print('Taobao' in s) # True
print('Facebook' not in s) # True
3.コレクションの組み込みメソッド
set.add(elmnt)
コレクションに要素を追加するために使用されます。追加された要素がコレクションにすでに存在する場合、操作は実行されません。
【例】
fruits = {
"apple", "banana", "cherry"}
fruits.add("orange")
print(fruits)
# {'orange', 'cherry', 'banana', 'apple'}
fruits.add("apple")
print(fruits)
# {'orange', 'cherry', 'banana', 'apple'}
set.update(set)
現在のコレクションを変更するために使用されます。現在のコレクションに新しい要素またはコレクションを追加できます。追加された要素がコレクションにすでに存在する場合、要素は1回だけ表示され、重複は無視されます。
【例】
x = {
"apple", "banana", "cherry"}
y = {
"google", "baidu", "apple"}
x.update(y)
print(x)
# {'cherry', 'banana', 'apple', 'google', 'baidu'}
y.update(["lsgo", "dreamtech"])
print(y)
# {'lsgo', 'baidu', 'dreamtech', 'apple', 'google'}
set.remove(item)
コレクション内の指定された要素を削除するために使用されます。要素が存在しない場合、エラーが発生します。
【例】
fruits = {
"apple", "banana", "cherry"}
fruits.remove("banana")
print(fruits) # {'apple', 'cherry'}
set.discard(value)
指定されたコレクション要素を削除するために使用されます。remove()
存在しない要素の削除中にメソッドエラーが発生し、discard()
メソッドは存在しません。
【例】
fruits = {
"apple", "banana", "cherry"}
fruits.discard("banana")
print(fruits) # {'apple', 'cherry'}
set.pop()
要素をランダムに削除するために使用されます。
【例】
fruits = {
"apple", "banana", "cherry"}
x = fruits.pop()
print(fruits) # {'cherry', 'apple'}
print(x) # banana
セットは順序付けられていない繰り返し要素のセットではないため、2つ以上のセットが数学的な意味でセット操作を実行できます。
set.intersection(set1, set2)
2つのセットの共通部分を返します。set1 & set2
2つのセットの共通部分を返します。set.intersection_update(set1, set2)
交差点、元のセットから重複しない要素を削除します。
【例】
a = set('abracadabra')
b = set('alacazam')
print(a) # {'r', 'a', 'c', 'b', 'd'}
print(b) # {'c', 'a', 'l', 'm', 'z'}
c = a.intersection(b)
print(c) # {'a', 'c'}
print(a & b) # {'c', 'a'}
print(a) # {'a', 'r', 'c', 'b', 'd'}
a.intersection_update(b)
print(a) # {'a', 'c'}
set.union(set1, set2)
2つのセットの和集合を返します。set1 | set2
2つのセットの和集合を返します。
【例】
a = set('abracadabra')
b = set('alacazam')
print(a) # {'r', 'a', 'c', 'b', 'd'}
print(b) # {'c', 'a', 'l', 'm', 'z'}
print(a | b)
# {'l', 'd', 'm', 'b', 'a', 'r', 'z', 'c'}
c = a.union(b)
print(c)
# {'c', 'a', 'd', 'm', 'r', 'b', 'z', 'l'}
set.difference(set)
セットの差を返します。set1 - set2
セットの差を返します。set.difference_update(set)
セットの違い、要素は元のセットから直接削除され、戻り値はありません。
【例】
a = set('abracadabra')
b = set('alacazam')
print(a) # {'r', 'a', 'c', 'b', 'd'}
print(b) # {'c', 'a', 'l', 'm', 'z'}
c = a.difference(b)
print(c) # {'b', 'd', 'r'}
print(a - b) # {'d', 'b', 'r'}
print(a) # {'r', 'd', 'c', 'a', 'b'}
a.difference_update(b)
print(a) # {'d', 'r', 'b'}
set.symmetric_difference(set)
セットの排他的論理和を返します。set1 ^ set2
セットの排他的論理和を返します。set.symmetric_difference_update(set)
現在のセットから別の指定されたセットの同じ要素を削除し、現在のセットに他の指定されたセットの異なる要素を挿入します。
【例】
a = set('abracadabra')
b = set('alacazam')
print(a) # {'r', 'a', 'c', 'b', 'd'}
print(b) # {'c', 'a', 'l', 'm', 'z'}
c = a.symmetric_difference(b)
print(c) # {'m', 'r', 'l', 'b', 'z', 'd'}
print(a ^ b) # {'m', 'r', 'l', 'b', 'z', 'd'}
print(a) # {'r', 'd', 'c', 'a', 'b'}
a.symmetric_difference_update(b)
print(a) # {'r', 'b', 'm', 'l', 'z', 'd'}
set.issubset(set)
コレクションが他のコレクションに含まれているかどうかを判断します。含まれている場合はTrueを返し、含まれていない場合はFalseを返します。set1 <= set2
コレクションが他のコレクションに含まれているかどうかを判断します。含まれている場合はTrueを返し、含まれていない場合はFalseを返します。
【例】
x = {
"a", "b", "c"}
y = {
"f", "e", "d", "c", "b", "a"}
z = x.issubset(y)
print(z) # True
print(x <= y) # True
x = {
"a", "b", "c"}
y = {
"f", "e", "d", "c", "b"}
z = x.issubset(y)
print(z) # False
print(x <= y) # False
set.issuperset(set)
コレクションに他のコレクションが含まれているかどうかを判断するために使用されます。含まれている場合はTrueを返し、含まれていない場合はFalseを返します。set1 >= set2
コレクションに他のコレクションが含まれているかどうかを判断します。含まれている場合はTrueを返し、含まれていない場合はFalseを返します。
【例】
x = {
"f", "e", "d", "c", "b", "a"}
y = {
"a", "b", "c"}
z = x.issuperset(y)
print(z) # True
print(x >= y) # True
x = {
"f", "e", "d", "c", "b"}
y = {
"a", "b", "c"}
z = x.issuperset(y)
print(z) # False
print(x >= y) # False
set.isdisjoint(set)
これは、2つのセットが互いに素であるかどうかを判断するために使用されます。Trueを返す場合は、Falseを返します。
【例】
x = {
"f", "e", "d", "c", "b"}
y = {
"a", "b", "c"}
z = x.isdisjoint(y)
print(z) # False
x = {
"f", "e", "d", "m", "g"}
y = {
"a", "b", "c"}
z = x.isdisjoint(y)
print(z) # True
4.変換を設定します
【例】
se = set(range(4))
li = list(se)
tu = tuple(se)
print(se, type(se)) # {0, 1, 2, 3} <class 'set'>
print(li, type(li)) # [0, 1, 2, 3] <class 'list'>
print(tu, type(tu)) # (0, 1, 2, 3) <class 'tuple'>
5.不変のコレクション
Pythonは、要素を変更できない、つまり要素を追加または削除できないコレクションの実装バージョンを提供し、型の名前はfrozenset
です。frozenset
セット操作は引き続き実行できますがupdate
、含まれているメソッドは使用できないことに注意してください。
frozenset([iterable])
凍結したコレクションを返します。凍結した後は、コレクションに要素を追加したり、コレクションから要素を削除したりすることはできません。
【例】
a = frozenset(range(10)) # 生成一个新的不可变集合
print(a)
# frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
b = frozenset('lsgogroup')
print(b)
# frozenset({'g', 's', 'p', 'r', 'u', 'o', 'l'})
参照:
- https://www.runoob.com/python3/python3-tutorial.html
- https://www.bilibili.com/video/av4050443
- https://mp.weixin.qq.com/s/DZ589xEbOQ2QLtiq8mP1qQ
練習用の質問:
- 1つの数字1のみを含むタプルを表す方法。
- 空のセットを作成し、3つの要素{'x'、 'y'、 'z'}を追加します。
- ['A'、 'B'、 'A'、 'B']をリストして、重複を削除します。
- 2つのセット{6、7、8}、{7、8、9}で繰り返されていない要素を見つけます(違いは、2つのセットの交点の外側の部分を指します)。
- {'B'、 'C'、 'D'}の{'A'、 'B'、 'C'}の要素の出現数を見つけます。
個人的な答えを練習する:
10の演習
10.1
a = (1,)
print(a,type(a))
(1,) <class 'tuple'>
10.2
a = set()
print(a)
a.update({
'x','y','z'})
print(a)
set()
{'y', 'x', 'z'}
10.3
a = ['a','b','a','b']
b = set(a)
print(list(b))
['a', 'b']
10.4
print(set.symmetric_difference({
6,7,8},{
7,8,9}))
{9, 6}
10.5
n = 0
for i in {
'A','B','C'}:
if i in {
'B','C','D'}:
n += 1
print(n)
2