Pythonの集合とタプル入門:set・tupleの基本と特徴

python logo notext.svg

Pythonにはリスト以外にも、いくつかのデータ構造が用意されています。

その中でも、settupleはよく使われる基本的な型です。
ただし、この2つはリストと似ている部分もありつつ、性質がかなり異なります。

この記事では、

  • setとは何か
  • tupleとは何か
  • リストとの違い
  • それぞれの使いどころ

を、順番に整理しながら見ていきます。

Pythonの導入についてはこちら。

Python入門:最初のプログラムを作って実行する方法 – Lean Data Office

Python環境構築のやり方|初心者向け完全ガイド – Lean Data Office

setとは

まずはsetから確認します。

setは、重複しない値を集めたデータ構造です。
波かっこ {} を使って定義します。

my_set = {'a','b','c'}
print(my_set)
image

見た目は少し辞書に似ていますが、キーと値のペアではなく、「値だけ」を持っています。

setは他のデータ構造から作ることもできます。

my_set = set(['a', 'b', 'c'])
print(my_set)
image

また、タプルからでも同じように作れます。

my_set = set(('a', 'b', 'c'))
print(my_set)
image

どちらも結果は同じになります。

setの特徴として、「同じ要素を持てない」という点があります。

これを利用すると、リストの重複を簡単に取り除けます。

my_list = ['a', 'b', 'c', 'c']
my_list = list(set(my_list))
print(my_list)
image

ただし、この方法には注意点があります。

setは順番を持たないデータです。

そのため、リストに戻したときに順序が変わる可能性があります。

print(list(set(['b', 'a', 'c'])))
image

上の例でもリストの順序が変わっています。

結果は環境によって異なりますが、元の順序は保証されません。

この特徴は非常に重要で、リストとは大きく異なるポイントです。

順序がないため、インデックスで要素を取り出すこともできません。

my_set = {'a', 'b', 'c'}
print(my_set[0])
image

これはエラーになります。

setは「何番目」という考え方を持たないためです。

要素の追加と削除

setにはリストとは異なる操作方法があります。

my_set.add('d')
print(my_set)
image

addは値を追加するメソッドです。
リストのappendとは違い、「末尾に追加する」という概念はありません。

削除についても、set特有の動きがあります。

my_set.discard('a')
print(my_set)
image

discardは値を削除しますが、存在しない場合でもエラーになりません。

setにもpopがあります。

print(my_set.pop())
image

ただし、リストと違って「最後の要素」ではなく、どれか1つが取り出されます。

どの要素が返るかは保証されません。

tupleとは?

次にtupleを見ていきます。

tupleは、リストとよく似ていますが「変更できない」という特徴があります。

my_tuple = ('a', 'b', 'c')
print(my_tuple)
image

tupleは順序を持つため、インデックスでアクセスできます。

print(my_tuple[0])
image

リストと同じように扱える部分も多くあります。

ただし、値の変更はできません。

my_tuple[0] = 'x'
image

これはエラーになります。

tupleは作成後に変更されないデータです。

一見すると不便に見えますが、いくつかの利点があります。

まず、変更されないためメモリ効率が良くなります。
また、「変更されないことが保証されるデータ」として安心して扱えます。

Pythonでは、関数から複数の値を返すことができます。

def func():
    return 1, 2, 3
result = func()
print(result)
print(type(result))

このように、カンマ区切りで値を返すと、自動的にタプルになります。

タプルは必ずしも括弧が必要ではありません。

my_tuple = 1, 2, 3
print(my_tuple)
image

この書き方でもタプルとして扱われます。

タプルは複数の変数に分解することもできます。

a, b, c = 1, 2, 3
print(a)
print(b)
print(c)
image

この操作は「アンパック」と呼ばれ、Pythonではよく使われる書き方です。

settupleは、どちらもリストと似ているようで性質が異なります。

setは順序を持たず重複を許さないデータ構造で、
tupleは順序を持つが変更できないデータ構造です。

最初は違いが分かりにくいかもしれませんが、それぞれの特徴を理解しておくことで、
適切な場面で使い分けできるようになります。

特に、重複の除去や関数の戻り値など、実際のコードでもよく登場します。

少しずつ試しながら使い方に慣れていくと、自然と使い分けができるようになっていきます。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。