モジュールのレッスン (4/4)
セット
セットは、一意で順序付けされていない要素のコレクションです。 3 つの超大国:
- 自動重複排除: 同じ要素を 2 回追加しても効果はありません。
- O(1) メンバーシップ テスト:
x in sは数百万人でも非常に高速です 要素の数 (辞書のようにハッシュベースです)。 - 集合演算: 和集合、交差、差分、対称差分。
セットの作成
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() が必要です。
セットの変更
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集合演算
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)、…) もあります。
さらに、セットだけでなく任意の反復可能オブジェクトも受け入れます。
会員テスト
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) で実行されます。さらに、和集合 (|)、積集合 (&)、差分 (-) などの代数演算もサポートしています。
試してみてください
リスト `nums = [1, 2, 2, 3, 3, 3, 4]` を指定すると、一意の値 (任意の順序) を使用して `unique_items` を構築し、`count` を len(unique_items) として計算します。 「カウント」を評価します。
ヒントを表示
set(nums) は重複を削除します。
3 回の試行後に解決策が利用可能になります
復習演習
`a = {1, 2, 3, 4}` および `b = {3, 4, 5, 6}` とすると、共通部分を `common_items` に、差分 a-b を `only_a` に計算します。タプル `(common_items,only_a)` を評価します。
ヒントを表示
&交差点、-違い。
3 回の試行後に解決策が利用可能になります
追加の課題
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 回の試行後に解決策が利用可能になります