メインコンテンツにスキップ
モジュール 3 · レッスン 4 / 4コース内の 12/36~10 min
モジュールのレッスン (4/4)

セット

セットは、一意で順序付けされていない要素のコレクションです。 3 つの超大国:

  1. 自動重複排除: 同じ要素を 2 回追加しても効果はありません。
  2. O(1) メンバーシップ テスト: x in s は数百万人でも非常に高速です 要素の数 (辞書のようにハッシュベースです)。
  3. 集合演算: 和集合、交差、差分、対称差分。

セットの作成

Python
vuoto = set()           # ATTENZIONE: {} è un dict vuoto, non un set!
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3])   # {1, 2, 3}

中括弧のみ {} はセットではなく空の辞書を作成します: 空のセットの場合 set() が必要です。

セットの変更

Python
s = {1, 2, 3}
s.add(4)         # {1, 2, 3, 4}
s.add(1)         # nessun effetto (già presente)
s.discard(99)    # rimuove se presente, silenzioso altrimenti
s.remove(2)      # rimuove o solleva KeyError

集合演算

Python
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

a | b    # {1, 2, 3, 4, 5, 6}     unione
a & b    # {3, 4}                  intersezione
a - b    # {1, 2}                  differenza (in a ma non in b)
a ^ b    # {1, 2, 5, 6}            differenza simmetrica (xor)

メソッド形式 (a.union(b)、a.intersection(b)、…) もあります。 さらに、セットだけでなく任意の反復可能オブジェクトも受け入れます。

会員テスト

Python
parole = {"ciao", "mondo", "python"}
"ciao" in parole       # True   O(1)
"java" not in parole   # True

比較のために: list 内で in を使用した検索は O(n) で長時間かかります はるかに遅いとリストされています。

凍結セット: 不変バージョン

frozenset({1, 2, 3}) はハッシュ可能なバージョンです。辞書キーまたは 別のセットの要素。

セットの操作とパフォーマンス

セットはハッシュ テーブルとして実装されるため、メンバーシップ テスト (x in my_set) が非常に高速になります。検索に線形時間 O(n) がかかるリストとは異なり、定数時間 O(1) で実行されます。さらに、和集合 (|)、積集合 (&)、差分 (-) などの代数演算もサポートしています。

試してみてください

運動#python.m3.l4.e1
試行回数: 0読み込み中…

リスト `nums = [1, 2, 2, 3, 3, 3, 4]` を指定すると、一意の値 (任意の順序) を使用して `unique_items` を構築し、`count` を len(unique_items) として計算します。 「カウント」を評価します。

エディターを読み込み中…
ヒントを表示

set(nums) は重複を削除します。

3 回の試行後に解決策が利用可能になります

復習演習

運動#python.m3.l4.e2
試行回数: 0読み込み中…

`a = {1, 2, 3, 4}` および `b = {3, 4, 5, 6}` とすると、共通部分を `common_items` に、差分 a-b を `only_a` に計算します。タプル `(common_items,only_a)` を評価します。

エディターを読み込み中…
ヒントを表示

&交差点、-違い。

3 回の試行後に解決策が利用可能になります

追加の課題

運動#python.m3.l4.e3
試行回数: 0読み込み中…

Given two sets `set_a = {1, 2, 3}` and `set_b = {2, 3, 4}`, calculate the mathematical intersection of the two sets (their common elements). Store the resulting set in `common_elements` and evaluate it.

エディターを読み込み中…
ヒントを表示

& 演算子または set_a.intersection(set_b) メソッドを使用できます。

3 回の試行後に解決策が利用可能になります