set
世界中のさまざまな都市から多くの顧客がいると想像してみてください。あなたは彼らの都市を追跡し、顧客がどの都市から来たかのリストを持っています。そのリストは次のようなものかもしれません:
['San Francisco', 'New York', 'Yerevan', 'New York', 'Tel Aviv', ...]
。New York
からの顧客が複数いることに気付きました。あなたは、顧客がどのユニークな都市から来たのかを知りたいと思っています。これはPythonの
set
を使えば簡単にできます:cities = ['San Francisco', 'New York', 'Yerevan', 'New York', 'Tel Aviv',
'San Diego', 'San Francisco', 'Yerevan']
uniques = set(cities)
print(uniques)
# {'San Diego', 'Yerevan', 'San Francisco', 'New York', 'Tel Aviv'}
print(len(cities)) # 8
print(len(uniques)) # 5
セット(
set
)は、重複のない要素を持つ順序のないコレクションです。ユニークな要素を保持するのに役立ち、特定の順序はありません。リストやタプルに似た要素の集合ですが、順序がなく、要素の一意性が保証されています。in
演算子を使って、セットに特定のアイテムが含まれているかを確認できます:print('San Francisco' in uniques) # True
print('Tel Aviv' in uniques) # True
print('London' in uniques) # False
print('Amsterdam' in uniques) # False
print(3 in uniques) # False
特定の要素が含まれているかを確認する際、
list
でチェックするよりもset
でチェックするほうがはるかに高速です。これは、set
のデータ構造としての特性によるものです。リストでは、Pythonはリストの最初の要素から最後の要素まで一つずつ比較し、存在すればTrue
を、そうでなければFalse
を返します。つまり、チェックのためにリスト全体を一つずつ反復します。一方、セットの構造では、はるかに少ない操作でこのチェックを行うことができます。 チャレンジ
あなたは食料品店の在庫管理を手伝っています。各商品について、その商品を納品する会社の名前を記録しています。彼らは、その会社に対して来月どれくらいの品物が必要かを伝えるメッセージを送りたいと考えています。しかし、いくつかの会社は複数の商品を納品しているため、同じ会社に複数のメッセージを送りたくありません。代わりに、取引している会社のリストを取得し、その後メッセージを送りたいのです。彼らはあなたに、パートナーであるすべての会社の名前を出力するプログラムを書くように依頼します。
入力の最初の行には整数
n
(商品の数)が含まれています。次の n
行には各商品の会社名が含まれています。プログラムは、店が提携している会社のユニークな名前を、それぞれ別の行に出力する必要があります。
入力 | 出力 |
5
Nestle
Mars
Nestle
Coca Cola
Nestle | Nestle
Mars
Coca Cola |
Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB