Pythonの集合内包表記(set)の基本と使い方
- 公開日:2018/11/08
- 更新日:2018/11/11
- 投稿者:n bit
Pythonでリスト内包表記を使ってコード内容を簡潔にすることができますが、同じように集合(set)でも集合内包表記を記述できます。今回はその集合内包表記の基本と使い方についての解説。基本的な考え方はリスト内包表記と同じです。
この記事は約 分で読めます。(文字)
Pythonの集合内包表記
リスト内包表記ページの冒頭でも解説しましたが内包表記はリスト以外にdictやsetでも利用することが可能です。
今回はその中の『集合内包表記(set)』について学習していきましょう。集合内包表記はリスト内包表記がlistからsetに置き換わっただけと考えれば十分です。
『内包表記』の基本的な考え方についてはリスト内包表記ページで詳しく解説しています。まだご覧になっていない方は先にそちらのページをご確認ください。
Pythonのリスト内包表記の基本と使い方
Pythonでリストを生成するときに内包表記を利用するとコード内容によっては簡潔に記述することができ無駄な呼び出し処理も抑えられるので実行処理速度を上げることができます。今回はそのリスト内包表記の基本と使い方についての解説です。
集合内包表記の記述方法
では早速集合内包表記の記述方法を確認していきましょう。集合内包表記の基本的な記述方法は以下のようになります。
- {新に格納する要素 for 配列内要素 in 配列}
最終的に集合を生成しますので波カッコ『 { } 』で挟み、『新に格納する要素』を最初に記述し、その後は通常のfor文と同じです。リスト内包表記の時とはカッコの形状が変わるだけですね。
実際にコードを確認したほうが早いでしょう。下記のサンプルコードは集合内包表記を使ってtupleから取得した値を2乗して新しいsetを作成した事例です。
nums = (4,8,9,17,33,68,56)
nums_2xset = {i ** 2 for i in nums}
print(nums_2xset)
出力結果
{64, 1089, 289, 3136, 16, 81, 4624}
- ※ 集合はシーケンスオブジェクトではないため出力結果の要素順序は違う可能性があります。その点にご注意ください。
シーケンスオブジェクトについては下記のページで詳しく解説しています。
Pythonのシーケンス(sequence)型とミュータブル・イミュータブル
Pythonのオブジェクトにはシーケンス(sequence)型やミュータブル・イミュータブルと言った機能別のカテゴリがあります。今回はシーケンス型の基本、演算、メソッド、組み込み関数とあわせてミュータブル・イミュータブルも解説します。
集合内包表記で利用されるサンプルコード
集合内包表記でもリスト内包表記のようにif文と合わせて利用することができます。集合内包表記で利用される事例をサンプルコード付きで紹介しておきましょう。
集合内包表記でif文も利用する場合のサンプルコード
集合内包表記内でif文と合わせて利用する場合の事例です。
tupple内の要素から偶数のみを抽出して新しい集合を生成する事例で考えてみましょう。偶数かどうかは2で割って余りがゼロになるかどうかで判定します。
i % 2 == 0
まずは通常通りのfor文とif文の組み合わせでaddメソッドを使ってtupple内の要素から集合を生成する場合のコードです。
nums = (4,8,9,17,33,68,56)
nums_even_set = set()
for i in nums:
if i % 2 == 0:
nums_even_set.add(i)
print(nums_even_set)
出力結果
{8, 56, 4, 68}
下記のサンプルコードは上記のコードを集合内包表記を使って置き換えたものです。if文はfor文の後にそのまま続けて記述することで利用できます。
nums = (4,8,9,17,33,68,56)
nums_even_set = {i for i in nums if i % 2 == 0}
print(nums_even_set)
出力結果
{8, 56, 4, 68}
今日のdot
集合内包表記とリスト内包表記はほとんど違いがありません。利用の仕方はほぼ同じです。違いが出てくるのはリストと集合の特性がそもそも違うのでその部分に関連するところで出てきます。
例えばsetの中にはlistやsetを2次元で格納することができません。そのためリスト内包表記のサンプルコードで示したfor文を入れ子にして2次元配列を作ったような事例は考えにくいでしょう。
集合の特徴は重複する要素を自動的に1つにまとめてくれることです。その特徴を生かせる時に集合内包表記を活用しましょう。
【フリーランス向けの完全無料Pythonプログラミング講座】
dot blogではこの記事以外にも完全無料でフリーランス向けのPythonプログラミング講座を公開中です。フリーランスとして活躍し稼ぐための強力な武器となりますよ。
Python入門講座【無料のプログラミング学習講座】
最近特に注目度が高くなってきているプログラミング言語Python。転職、フリーランス、独立・起業を検討中、日々の業務が忙しい社会人等は今こそ身に付けておきたいスキルの1つ。初心者向けにやさしいプログラミング学習内容のPython入門講座を無料で公開。