「PythonのSet union() – 5分で完全ガイド」

「PythonのSetのunion()メソッド - 完全ガイド5分で習得する方法」

<img src=”https://ai.miximages.com/opendatascience.com/wp-content/uploads/2023/11/pythontop.png”/><p>Pythonのプログラマーには、2つのセットを結合するためのいくつかの方法があります。このブログポストでは、セットのunion()メソッドを探求し、その使用方法のいくつかの例を紹介します。また、セットのunion()を使用する利点についても説明し、Python開発者にとって人気のあるツールである理由も見ていきます。<p>最後に、いくつかの高度な使用例を紹介し、セットのunion()の効率も検証します。さあ、始めましょう!</p><h2 id=”python-set-union-the-basics”>Pythonセットの結合-基本</h2><p>このセクションでは、Pythonでセットのunion()関数の基本的な定義と使用方法、構文と戻り値を見ていきます。</p><h3 id=”definition-and-usage-of-set-union-in-python”>Pythonでのセットの結合の定義と使用方法</h3><p>いくつかの例を示す前に、基本から始めましょう。セットのunion()とは何でしょうか?予想通り、2つのセットを結合する関数です。この関数では、1つのセットを他の複数のセットまたはPythonのイテラブルオブジェクトと結合することができます。</p><p>たとえば、次の2つのセット、ABを見てみましょう:</p><figure><img alt=”Image 1 – Python set union – two sets (image by author)” src=”https://ai.miximages.com/betterdatascience.com/python-set-union/images/1.jpg”/><figcaption aria-hidden=”true”>イメージ1 – Pythonセットの結合 – 2つのセット(著者による画像)</figcaption></figure><p>イメージ1 – Pythonセットの結合 – 2つのセット(著者による画像)</p><p>これらのセットの間の結合を計算することは、両方のセットのすべての重複しない要素から新しいセットを作成したいという意味です:</p><figure><img alt=”Image 2 – Python set union – the union between two sets (image by author)” src=”https://ai.miximages.com/betterdatascience.com/python-set-union/images/2.jpg”/><figcaption aria-hidden=”true”>イメージ2 – Pythonセットの結合 – 2つのセットの結合(著者による画像)</figcaption></figure><p>イメージ2 – Pythonセットの結合 – 2つのセットの結合(著者による画像)</p><p>Pythonセットのunion()は、しばしばベン図で表されます。次に、それがどのように見えるかを示します:</p><figure><img alt=”Image 3 – Python set union as a Venn diagram (image by author)” src=”https://ai.miximages.com/betterdatascience.com/python-set-union/images/3.jpg”/><figcaption aria-hidden=”true”>イメージ3 – Pythonセットの結合 – ベン図としての結合(著者による画像)</figcaption></figure><p>イメージ3 – Pythonセットの結合 – ベン図としての結合(著者による画像)</p><p>左側のセットには、右側のセットにない要素として、RとJuliaがあります。同様に、右側のセットにはJavaScriptとGoが独自の要素としてあります。両方のセットに共通する要素は1つだけあります- Pythonです。</p><p><strong>注意</strong>:項目が複数のセットに存在する場合、結果のセットにはアイテムが1回だけリストされます。</p><h3 id=”syntax-of-set-union-in-python”>Pythonでのセットの結合の構文</h3><pre><code># 2つのセットを結合set1.union(set2)# 複数のセットを結合set1.union(set2, set3, …)</code></pre><p>ここで:</p><ul><li><code>set1</code> – 結合するイテラブル</li><li><code>set2</code>、<code>set3</code> – オプションのセット(他のイテラブル)</li></ul><h3 id=”return-value-of-set-union-in-python”>Pythonでのセットの結合の戻り値</h3><p>Pythonのセットのunion()関数は、最初のセットとすべてのセットの結合を返しますが、union()関数にセットまたはイテラブルオブジェクトが渡された場合のみです。</p><p>union()関数に引数が渡されなかった場合、セットのコピーが返されます。</p><h2 id=”python-set-union-function-example”>Pythonセットの結合の関数の例</h2>

上の画像と同様に、2つの集合を宣言します:

  • A – データサイエンスで使用されるプログラミング言語を含みます
  • B – ウェブ開発で使用されるプログラミング言語を含みます

Pythonのように一部のプログラミング言語は交換可能なので、両方の集合に含まれます。これは以前に見たように、1度だけ表示されるべきです:

A = {'Python', 'R', 'Julia'}
B = {'Python', 'JavaScript', 'Go'}
print(f"A U B = {A.union(B)}")

出力:

A U B = {'Go', 'Python', 'JavaScript', 'R', 'Julia'}

Pythonのsetのunion()関数にパラメータを指定しない場合、setがコピーされます:

print(f"A.union() = {A.union()}")

出力:

A.union() = {'R', 'Julia', 'Python'}

コピーされたことを確認するために、そのメモリアドレスを表示することもできます:

A = {'Python', 'R', 'Julia'}
A_copy = A.union()
print(hex(id(A)))
print(hex(id(A_copy)))

出力:

0x105a03e400x105a039e0

同じ値は表示されませんが、重要なのは異なることであり、別のメモリアドレスにsetがコピーされたことを示しています。

では、複数の集合の和集合を得る短い方法を見てみましょう。

Pythonの集合和集合演算子を使う

毎回Pythonのsetのunion()関数を呼び出す必要はありません。代わりにパイプ(|)演算子を使うことができます:

A = {'Python', 'R', 'Julia'}
B = {'Python', 'JavaScript', 'Go'}
print(f"A U B = {A | B}")

出力:

A U B = {'Go', 'Python', 'JavaScript', 'R', 'Julia'}

それ以外は同じです。このアプローチは最初の方法よりもコンパクトで読みやすくなります。少なくとも2つの集合を結合する場合はそうです。

Pythonの高度な和集合の例

以下では、「高度な」和集合の例と用途について説明します:

  • 複数の集合引数
  • 集合の更新と集合の和集合
  • イテラブルオブジェクトの和集合

複数の集合引数

1つの集合と複数の集合の和集合を取得することができます。さらに、科学計算に使用されるプログラミング言語を含む別の集合を宣言し、これらの3つの集合の和集合を計算します。

計算は通常の構文とショートハンドのパイプ構文の両方を使用して行えます:

A = {'Python', 'R', 'Julia'}
B = {'Python', 'JavaScript', 'Go'}
C = {'R', 'Matlab', 'Octave'}
print(f"A U B U C = {A.union(B, C)}")
print(f"A U B U C = {A | B | C}")

出力:

A U B U C = {'Octave', 'Go', 'Python', 'JavaScript', 'Matlab', 'R', 'Julia'}
A U B U C = {'Octave', 'Go', 'Python', 'JavaScript', 'Matlab', 'R', 'Julia'}

集合の更新と和集合

Pythonでは、set.update()およびset.union()の両方を使用して和集合を行うことができます。前者は呼び出されたセットに足りない要素を全て追加し、Noneを返します。後者は新しい集合を作成し、返します。

以下にset.update()の動作を示します:

A = {'Python', 'R', 'Julia'}
B = {'Python', 'JavaScript', 'Go'}
A.update(B)
print(A)

出力:

{'Go', 'Python', 'JavaScript', 'R', 'Julia'}

ご覧の通り、更新はその場で行われます。更新操作の結果を新しいセットに保存することはできないので、それを心に留めておく必要があります:

A = {'Python', 'R', 'Julia'}B = {'Python', 'JavaScript', 'Go'}C = A.update(B)print(C)

出力:

None

イテラブルオブジェクトでのPythonの合併

Pythonのセットでunion()関数を呼び出し、引数として任意のイテラブルオブジェクトを指定することができます。以下はPythonリストの例です:

l1 = {1, 2, 3}l2 = [2, 3, 4]print(l1.union(l2))

出力:

{1, 2, 3, 4}

注意:短縮パイプ演算子は使用できません:

l1 = {1, 2, 3}l2 = [2, 3, 4]print(l1 | l2)

出力:

イメージ4 - Pythonのセットとリストの合併時のTypeError(著者のイメージ)

イメージ4 – Pythonのセットとリストの合併時のTypeError(著者のイメージ)

他のデータ型にはunion()関数がないため、Pythonのセット以外を最初に使用することはできません:

l1 = [1, 2, 3]l2 = [2, 3, 4]print(l1.union(l2))

出力:

イメージ5 - Pythonのリストでunion()を呼び出そうとしたときのAttributeError(著者のイメージ)

イメージ5 – Pythonのリストでunion()を呼び出そうとしたときのAttributeError(著者のイメージ)

まとめると – 常にパイプ演算子の代わりにunion()関数を使用し、関数をセットで呼び出す必要があります。

Pythonセットの合併のパフォーマンス(時間の計算量)

ここでは、Pythonにおけるセットの合併操作の時間計算量を分析します。ソースコードはFinxterブログで見つけ、わずかに修正しました。要約します:

  • 要素数がnであるセットとm要素のセット引数の時間計算量はO(n + m)です。
  • セットに要素を挿入するときの計算量はO(1)です。

以下は、セットのサイズをX軸に、実行時間(秒)をY軸に計算して表示するPythonコードです。このコードはM1 Pro MacBook Pro 16″で実行しました:

import timeimport matplotlib.pyplot as pltplt.rcParams['figure.figsize'] = (12, 5)plt.rcParams['axes.spines.top'] = Falseplt.rcParams['axes.spines.right'] = False# 計算sizes = [i * 10**5 for i in range(100)]runtimes = []for size in sizes:    s = set(range(size))    t = set(range(0, size, 2))        t1 = time.time()    s.union(t)    t2 = time.time()        runtimes.append(t2 - t1)        # プロットplt.figure()plt.plot(sizes, runtimes, lw=3, color='#101010')plt.title('Python set union() runtime vs. set size', size=20)plt.xlabel('Set size', size=14)plt.ylabel('Runtime (s)', size=14);

出力:

Image 6 - Python set union() time complexity chart (image by author)

画像6 – Python set union()の時間複雑度チャート(著者の画像)


結論

Pythonのset unionは理解しやすいです。定義と直感を通じて進んでいき、より複雑な使用例を理解するための手掛かりを徐々に築いていきました。進んだセクションでさえ理解しやすかったことを認める必要があります。

元の記事はこちらに投稿されています。許可を得て再投稿されました。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more