Python-セット

Setは順序が保証されていないCollectionです。

Setについて詳しく説明します。

生成(Create)

Setは、以下のように {...}を使用して作成します。 {...}はdictと同じですが、追加されるアイテムがkeyの値を持っていません。

cities = {'Seoul', 'Tokyo', 'Beijing', 'Washington', 'Paris'}
print(cities)

出力してみれば順序が保証されていないことを見ることができます。

{'Beijing', 'Seoul', 'Paris', 'Washington', 'Tokyo'}

注意すべき点は、アイテムがないSetを作成するときに、次のように生成しないでください。 { }はdictのかsetのか区別が困難である。 { }は、基本的にdictオブジェクトとして生成されます。

cities = {}
print(type(cities)) # <class 'dict'>

空のSetオブジェクトを作成したい場合は、次のように set()で生成することができます。

cities = set()
print(type(cities)) # <class 'set'>

アクセス(Access)

Setは順序が保証されず、インデックスがない(unindexed)Collectionあるため、 get()[]などでアクセスができません。

次のように for inにSetのすべてのアイテムにアクセスすることができます。

cities = {'Seoul', 'Tokyo', 'Beijing', 'Washington', 'Paris'}
for city in cities:
    print(city)

Ouput:

Tokyo
Washington
Paris
Beijing
Seoul

または if inを使用して、特定のアイテムがSetにあることを確認することができます。

cities = {'Seoul', 'Tokyo', 'Beijing', 'Washington', 'Paris'}

if 'Seoul' in cities:
    print('Seoul is in cities')

if 'Bangkok' not in cities:
    print('Bangkok is not in cities')

Output:

Seoul is in cities
Bangkok is not in cities

追加(Add)

add()でSetにアイテムを追加することができます。

cities = {'Seoul', 'Tokyo', 'Beijing', 'Washington', 'Paris'}
cities.add('Bangkok')
print(cities)

Output:

{'Washington', 'Tokyo', 'Paris', 'Beijing', 'Bangkok', 'Seoul'}

の更新プログラム(Update)

update()でListのすべてのアイテムをSetに追加することができます。

cities = {'Seoul', 'Tokyo', 'Beijing'}
cities.update(['Bangkok', 'Washington', 'Paris'])
print(cities)

Output:

{'Bangkok', 'Paris', 'Tokyo', 'Washington', 'Seoul', 'Beijing'}

update()の引数としてSetを転送することもできます。重複を許可していないので、重複したアイテムがある場合は一つだけSetに登録されます。

cities = {'Seoul', 'Tokyo', 'Beijing'}
cities.update({'Seoul',  'Washington', 'Paris'})
print(cities)

Output:

{'Paris', 'Washington', 'Seoul', 'Tokyo', 'Beijing'}

次のように二つ以上のSetを更新することもできます。

cities = {'Seoul', 'Tokyo', 'Beijing'}
cities.update({'Seoul',  'Washington'}, {'Paris', 'Bangkok'}, {'Hanoi'})
print(cities)

Output:

{'Beijing', 'Hanoi', 'Tokyo', 'Seoul', 'Paris', 'Washington', 'Bangkok'}

削除(Remove)

remove()でSetでどんなアイテムを削除することができます。

cities = {'Seoul', 'Tokyo', 'Beijing', 'Washington', 'Paris'}
cities.remove('Seoul')
print(cities)

Output:

{'Paris', 'Beijing', 'Washington', 'Tokyo'}

remove()は存在しないアイテムを消去しようとすると、次のようにエラーが発生します。

cities = {'Seoul', 'Tokyo', 'Beijing', 'Washington', 'Paris'}
cities.remove('Bangkok')
print(cities)

Output:

Traceback (most recent call last):
  File "/home/js/blog-code/python_example/set_example.py", line 40, in <module>
    cities.remove('Bangkok')
KeyError: 'Bangkok'

Discard

discard()remove()のようにアイテムをSetから削除することができます。違いは、存在しないアイテムを削除するときにエラーが発生しません。

cities = {'Seoul', 'Tokyo', 'Beijing', 'Washington', 'Paris'}
cities.discard('Seoul')
cities.discard('Bangkok')
print(cities)

Output:

{'Beijing', 'Washington', 'Tokyo', 'Paris'}

Pop

pop()はSetの最後のアイテムを削除して、その値を返します。 しかし、Setは順序が保証されないので、どんなアイテムが削除されるか予想することはできません。

cities = {'Seoul', 'Tokyo', 'Beijing', 'Washington', 'Paris'}
removed = cities.pop()
print(removed)
print(cities)

Output:

Washington
{'Beijing', 'Tokyo', 'Paris', 'Seoul'}

Del

delでSetオブジェクトを削除することができます。

cities = {'Seoul', 'Tokyo', 'Beijing', 'Washington', 'Paris'}
del cities

和(Union)

union()は和のように、二つのSetを一つのSetで合わせ、そのSetを返します。重複を許可していないため、重複した値がある場合のみ含まれます。

cities1 = {'Seoul', 'Tokyo', 'Beijing'}
cities2 = {'Seoul',  'Washington', 'Paris'}
cities3 = cities1.union(cities2)
print(cities3)

Output:

{'Seoul', 'Tokyo', 'Washington', 'Paris', 'Beijing'}

積(Intersection)

積のように、二つのSetの重なる部分だけを得たい場合は、次のように &キーワードを使用することができます。

cities1 = {'Seoul', 'Tokyo', 'Beijing'}
cities2 = {'Seoul',  'Washington', 'Paris'}
cities3 = cities1 & cities2
print(cities3)

Output:

{'Seoul'}

Related Posts

codechachaCopyright ©2019 codechacha