- 更新日: 2018年06月28日
- 公開日: 2018年06月05日
Pythonのタプルとは一体?わかりやすく解説をしてみた
研究や開発などの現場では、多くの実験データやサンプル数を用意するために一つのプログラムを複数名で共有する場合もありますね。
そんなとき、気になることの一つに「勝手に演算処理(プログラム)を変えられないか」ということ。
せっかく集めたデータも処理が違っていると台無しになるかもしれませんし、再度計算という手間がかかるかもしれません。
そういったリスクを軽減させたい時に「タプル(tuple)」が便利。
今回は、Pythonのタプルについてご紹介させて頂きますね。
Pythonのタプルとは一体?わかりやすく解説をしてみた
タプルとは?
タプルは、リストや辞書型といった複数の要素を管理するデータ型の一種。
特徴としては、
- 要素を追加・削除・変更できない
- () と , がトレードマーク
- 使用メモリがリストに比べて小さい*
- 多くの場合でリストよりタプルの方が早く演算できる*
- リストや辞書型と併用できる
- list() と tuple() 関数でデータ型は変更できる
などです。
この中でも一番のポイントは、「要素を追加・削除・変更できない」という点でしょう。そのためタプルは、定数リストとも言われますね。
コードについては以下のような感じです。
■タプル■
■リスト■
■辞書型■
一見するとタプルは、リストの [] が () になっているだけ。 しかし、このカッコの定義の仕方で機能が大きく変わります。 タプルと似ているリストとの機能について確認してみますね。
【タプルとリストの機能(メソッド)比較】
タプル | リスト |
---|---|
'count' 'index' |
'append' 'clear' 'copy' 'count' 'extend' 'index' 'insert' 'pop' 'remove' 'reverse' 'sort' |
なんとタプルは2つしかメソッドがないのに対してリストは11あります。気になる方は、 Jupyter Notebook に dir(tuple_x)
と dir(list_x)
を入力してみて下さい。
それではここで一旦、本当にタプルの要素は上書きや削除ができないか試してみましょう。
■要素の置換(上書き)をテスト■
■要素の削除をテスト■
余談ですが、タプルの要素、実はスライス機能やリスト関数を使うと要素の削除や置換できます。 ご興味ある方は、こちらのページなどを参考にしてみて下さい。
それではタプルの機能を理解できたところで、実際にどんなところでタプルが使われるのか確認してみます。
タプルが必要な時
データを「リスト」でも「辞書型」でもなくあえてタプルで扱いたい時は、以下の場合でしょう。
- 要素の順番を変えられたくない時
- データ型に変更が出ない場合(固定の場合)
例えば、実験や開発現場などで一つの演算ファイルを共有して使用する場合が考えられるでしょう。 少し例を考えてみますと、あるデータに特定のパラメータを与えてデータ収集する場合など。 試しに東京の気温だけにパラメーターを与えて、気温の合計値を演算するプログラムを考えてみました。
from weather import Weather, Unit
weather = Weather(unit=Unit.CELSIUS)
location_Tokyo = weather.lookup_by_location('tokyo')
location_Osaka = weather.lookup_by_location('osaka')
location_Sapporo = weather.lookup_by_location('sapporo')
data1 = location_Tokyo.condition
data2 = location_Osaka.condition
data3 = location_Sapporo.condition
data_set1 = float(data1.temp)
data_set2 = float(data2.temp)
data_set3 = float(data3.temp)
TestData = (data_set1, data_set2, data_set3)
print(TestData)
paramerter = 0.99
TestData = (data_set1*paramerter, data_set2, data_set3)
print(TestData)
print(sum(TestData))
上記コードの中でタプルは、
TestData = (data_set1, data_set2, data_set3)
と
TestData = (data_set1*paramerter, data_set2, data_set3)
の2回出てきています。
東京の気温だけにパラメーターを与えたいので、この要素の順番・内容が変わっちゃうと、結果がおかしくなりますよね。 そんなことでプログラム開発する時に「変えられたくない」と思った時にタプルは役立ってくれそうです。
ちなみに上記コードの実行結果は、こんな感じです。
タプルでできること
リストに比べて何かと制限の多そうなタプルですが、 count と index メソッド以外にできることがいくつかあります。
■タプルの機能一覧■
機能 | 概要 |
all() | 要素チェックを行い、Trueを返します。 |
any() | 要素のどれかが真であればTrueを返します。 |
enumerate() | 列挙型オブジェクトを返します。 |
len() | タプル内の長さを返します。 |
max() | タプル内の最大の要素を返します。 |
min() | タプル内の最小の要素を返します。 |
sorted() | ソートされたリストを返します。 |
sum() | 要素の合計を返します。 |
tuple() | リストや辞書など他のデータ型をタプルへ変換します。 |
■タプルを使った max と minの例■
タプルの作り方
これまでにタプルを使ったコードをいくつかご紹介させていただきましたが、実際に書くとなるとどうでしょう。 こちらではタプルの作り方、書き方をご紹介しますね。
今回は、簡単な 1, 2, 3 という数字をタプルで管理してみます。
▶ Step.1
タプルへ格納する要素を準備する
数字の場合は 1, 2, 3、文字列の場合は '1', '2', '3' と , (コンマ) で区切ることで、タプル型になりますね。 また上記結果のように、実は () がなくてもタプルでの扱いになりますが、可読性・常習性の点から () を つけて記述しましょう。
▶ Step.2
要素を変数で管理
タプルで管理したい要素群を 変数 x に代入。
type()関数でデータ型を見てみます。
ちゃんとタプル(tuple)になっていますね。
▶ Step.3
タプルを操作
一番簡単なprint()関数でタプルを操作してみます。
基本的なタプルの作り方は以上です。
あとはこれを応用してリストや辞書型と併用したりすると、データ操作の幅も広がると思います。
\AIエンジニアに必要なスキルが身に付く/
まとめ
リストに比べてややマイナーなタプルですが、Pythonの基礎学習では必ず登場してきます。 またタプルを学習しだすと関数(open()やremove())もしくは引数(add(2)など)と混同するときもあるでしょう。 これは 『 タプル =()カッコ 』と認識しているからだと思います。 タプルの作り方でもご紹介したように、()カッコではなく ,コンマ でPythonはタプルを認識。 タプル習得のコツは、『 ()カッコ と ,コンマ で管理するデータ型がタプル 』と認識すると関数や引数などと混同せずにスムーズに学習が進められると思います。
ちなみにこちらのコード、どれがタプルか分かりますでしょうか?
data1 = sub(1,2,3)
data2 = (1,2,3)
data3 = 1000,
data4 = 1000
data5 = '1000'
「ちょっと分からない」という方、Pythonの基礎学習いかがでしょう?
忙しくても比較的学習しやすいプログラミングスクールの CodeCamp、Python習得に役立つと思いますよ。
- この記事を書いた人
- オシママサラ