プログラミング言語はいろいろとありますが、近年人気が高まっているのがPythonです。
とくに科学技術分野をメインとして、広く普及しつつあります。コードの記述がシンプルで短いものが多いので、初心者でも短期間でマスターできるところが人気の理由です。
Pythonの中には、今回紹介するset型があります。ここでは、set型とは何か、どのように活用すればいいかについて見ていきます。
Pythonのset型とは
そもそも、Pythonのset型についてよくわからないという人もいるでしょう。まずはset型の基本的なことについて見ていきましょう。
set型とは「集合型」とも呼ばれることからもわかるように、集合を扱うデータ型の一種です。つまり、複数の値を格納できる型を指します。
イメージ的には数学の集合に似ているものと思ってもらえばいいでしょう。ただし、数字に限らず、フレーズの集合をセットにすることも可能です。
listとの違いは?
先に定義したset型を見て、「listと何が違うのか?」と思う人もいるでしょう。
listも複数の要素を集合するための方ですが、主に2つのポイントで違いが見られます。
それはset型の場合、要素の報復が認められないのと、順序性を持たせない点での違いです。
まず要素の重複がないのは、実際にやってみるとはっきりわかるでしょう。
listからsetに変換した時にlistの中に2つ以上ある要素は、setの段階で1つにされてしまいます。たとえば社内で扱う場合、社員IDや名前のような重複の可能性の低い要素を管理するのには向いています。
ところが、生年月日や血液型など重複する恐れのあるデータの管理には向いていません。
次の順序性の有無ですが、listの場合、同じ要素でも順番が違っていると別のものとして扱われてしまいます。
一方、setの場合は、順番が違っていても中の要素が同一であれば、同じものとして扱われます。setには順序性がないので、数字を入れ替えても同一であると解釈されるわけです。
たとえば、社員を若い順や収入順など順番に並べて管理したいと思うのであれば、順番によって別物として取り扱われるlistの方が適しています。
順序関係なく、ただ1つの集まりとして管理したければ、setを使っても問題ないでしょう。
Pythonのsetをマスターするメリット
Pythonを勉強するのであれば、set型についてマスターするといいでしょう。効率性が高まるので、作業時間の短縮が期待されます。
開発効率が向上する
ユニークなデータをまとめてsetで管理すると、開発効率が向上します。
というのも、特定の処理を数行程度に省略して記述できるからです。set型には、あらかじめ用意された機能がいろいろとあるためです。
また、先ほども紹介したように、setでは重複している要素は自動的に排除する仕組みになっています。
いろいろな要素が含まれていて、中には重複もあるかもしれない、そこで重複している部分は排除したいといった時にはset型を利用するのがおすすめです。
要素を入力して、重複するものがあれば自動的に排除してくれるからです。
サンプリング処理が1行で完了する
set型にはpopメソッドを有しています。
つまり、特定の要素を抽出できるわけです。listにもpopメソッドはありますが、順序の概念があるので抽出するのに若干時間がかかります。
「何番目の要素」と指定しなければならないからです。listのデフォルトは、末尾の要素を抽出するようになっています。
一方、set型の場合は、先ほども紹介したように、順序という概念がそもそもありません。つまり、要素をランダムにサンプリングできるわけです。
学校の生徒データを作成した場合を仮定しましょう。
たとえば、生徒会に所属している生徒の出席番号をA、運動部に所属している生徒の出席番号をBとしてまとめたとします。
そして、生徒会と運動部の両方に所属している人を「A&B」として抽出すると、1行で記述できます。
このように、サンプリングをシンプルな形で抽出できるのも、Pythonのset型の魅力です。
Pythonのset型の基本的な使い方について紹介
Pythonのset型の基本的なことについてわかったところで、具体的にどのように使用すればいいのかについて見ていきます。
そこまで複雑な記述は必要としないので、まったくの初心者でも比較的早くマスターできるでしょう。
オブジェクトの作成方法
先ほど例に出した生徒の出席番号に関するデータ作成で見ていきましょう。
生徒会に所属している生徒の出席番号をA、運動部に属している出席番号をBとして管理する場合、コードは以下のようになります。
A={1,3,5,7,9}
B={2,3,5,6,8}
このように{}でくくることで、setの作成は可能です。
そして、生徒会にも運動部にも属している出席番号を抽出したければ、「A&B」と入力します。すると{3,5}と結果が出るはずです。
つまり、生徒会にも運動部にも属している生徒は3番と5番の生徒であると判明するわけです。
要素を追加するには?
すでに管理されているset型に新たに要素を追加したい時もあるでしょう。
その場合にはaddメソッドを使用すれば、追加が可能です。
同じく先ほどの生徒の出席番号の管理で、出席番号7番の生徒が運動部に入部したと仮定しましょう。
この場合、以下のような記述をすれば追加できます。
B={2,3,5,6,8}
B.add(7)
このように記述すれば、Bのsetに出席番号7番が新たに加わりました。
これで出力すると{2,3,5,6,7,8}と7番がカッコの中に存在しているはずです。
この時、すでに内部にある要素を入力しても、その行為は反映されません。重複は無視されるためです。
ただし、エラーになることはないので、その部分の心配は不要です。
要素を排除するには?
逆にカッコ内の要素を取り出したければ、removeメソッドを用いてください。
先ほどの運動部に属しているsetから出席番号5番が退部したと仮定しましょう。
この場合には、以下のようなコードを入力することで、Bグループから出席番号5番を排除できます。
B={2,3,5,6,7,8}
B.remove(5)
このコードを入力して、Bグループを出力するとB{2,3,6,7,8}という結果になるでしょう。
こうして退部した出席番号5番の生徒はBグループから排除されました。もし元々ない要素の削除のコードを入力すると、エラーが発生してしまいます。
要素の入力には注意してください。
管理しているすべての要素を一気に削除したければ、clearメソッドを利用すると作業時間を短縮化できます。
先ほどの運動部グループの生徒が受験前にすべて引退した場合、以下のようなコードを作成するといいでしょう。
B.clear()
すると出力結果はset()となります。つまり先ほどのsetが空になったわけです。
和集合を作る方法
setは、ただ共通する要素をひとまとめにするだけでなく、和集合などの計算にも対応しています。
たとえば、Aという集合とBという集合があったとしましょう。
そしてこの集合の和をCと定義したとします。
この場合、以下のようなコードを作成すれば和集合が取れます。
A={1,2,3}
B={3,4,5}
C=A|B
パイプという演算子を使用することで、集合の和が取れます。Cは{1,2,3,4,5}というセットになるはずです。
3はAにもBにも属していますが和集合すれば重複しているので、3は1つしか表示されません。
その他には、unionメソッドを使用しても同じ結果になります。
先ほどの例で紹介すると、C=A.union(B)とすればいいわけです。
出力すれば、先ほどと同じ結果になるはずです。
和集合を作成するにあたって、一般的には+演算子を使用するのではと思う人もいるでしょう。
しかし、Pythonのset型では+の演算子は使用しません。この部分には注意した方がいいでしょう。
Pythonのsetに関するまとめ
Pythonには、set型と呼ばれるオブジェクトがあります。list型とは異なる部分がありますが、また別の利便性があります。set型をマスターできれば、何かと便利です。
set型を自在に活用できるようにして、効率的に作業を進めていきましょう。
ここで紹介したオブジェクトは、基本的なものです。ほかにもいろいろな使い方が考えられます。
基本的な使い方がマスターできれば、応用方法も勉強してみるといいでしょう。
ここで紹介したように、set型のオブジェクトは決して複雑ではありません。
シンプルなコードの記述で成立するので、Pythonに興味のある人はset型もあわせて学習してみるといいでしょう。