タプルの使い方について知りたいです。
今回はシーケンスのうちタプルの使い方について説明させて頂きます。
シーケンスの概念についてはこちらの記事をどうぞ。
【Python】文字列シーケンスの使い方のまとめ
続きを見る
本記事の学習内容
- タプルの使い方について
- タプルとリストの違いについて
- タプルの使用例
では早速見ていきましょう。
他のシーケンスとの使い方の違いについて
シーケンスには、タプル、リスト、レンジ、文字列などがあります。
今回はシーケンスのうち、タプルについて解説していきます。
タプルを説明する際に、他のシーケンスと比較した方がわかりやすいので、リスト構文と比較しながら解説していきたいと思います。
リスト構文は多くの要素を収納する事ができます。その一方で、タプル構文ではどうでしょうか。以下がタプルとリストの違いです。
タプルとリストの違い
- リストは収納されている要素を変更する事が可能です。この様な性質をミュータブル(mutable)と言います。
- 一方でタプルは収納されている要素の変更が不可能となっています。この様な性質をイミュータブル(immutable)と言います。
ここで、タプルで出来る事は、参照と検索のみです。
タプルを使用する事で収納されている要素の変更が不可能となるため、一度使用すると、タプルに格納されている要素の追加や削除、変更などを行う事が出来ません。
一方で、リストよりも使いやすい点もあります。
タプルのメリット
- 処理のスピードが早い
- 不変な数値や文字列 で扱いやすい。
- 辞書機能を使用できる。
以上を踏まえて、早速タプルを使用したコードについて見ていきましょう。
タプルを使用したコードの書き方
タプルのコード例
リストは []
を使用しましたが、タプルは ()
を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 | >>> x = ("a" ,"b", "c", "d", "e") >>> y = ("sanka", "fujinka", "seisixyoku", "jixyoseiigaku") >>> z = (1, "a", 2, "b", 3, "c", 4) >>> w = () >>> print(x) ('a', 'b', 'c', 'd', 'e') >>> print(y) ('sanka', 'fujinka', 'seisixyoku', 'jixyoseiigaku') >>> print(z) (1, 'a', 2, 'b', 3, 'c', 4) >>> print(w) () |
ここで x
に注目すると、タプルに対してタプルの内容を変更する事は出来ます。
1 2 3 4 | >>> x = ("a" ,"b", "c", "d", "e") >>> x = ("f", "g", "h", "i", "j") >>> print(x) ('f', 'g', 'h', 'i', 'j') |
次にタプルに対して四則演算を使用してみます。
タプルで四則演算を使用する
次にタプルで +
や *
などの四則演算を使用してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> try_num1 = (1, 2, 3) >>> try_num1 = (1, 2, 3, 4) >>> try_num2 = (5, 6, 7, 8) >>> try_num3 = (9,10) >>> try_num4 = try_num1 + try_num2 + try_num3 >>> print(try_num4) (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) >>> try_num5 = try_num3 * 3 >>> print(try_num5) (9, 10, 9, 10, 9, 10) >>> try_num1 += (4, 5, 6, 7, 8, 9, 10) >>> print(try_num1) (1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10) |
ここで重要な事はタプルでは 四則演算 ( + , * )が非破壊的という事です。
タプルの使用方法の注意点
タプルを使用する際の注意点は x = (6)
,という様な使用方法であれば、出力される文字の type
は int
型になってしまう点です。
そのため、タプルとして使用する際には x = (6)
ではなく x = (6, )
の様に 整数,
と記載する必要があります。 実際にターミナルで確認してみましょう。
1 2 3 4 5 6 7 8 9 10 | >>> x = (5) >>> print(x) 5 >>> type(x) <class 'int'> >>> x = (5,) >>> print(x) (5,) >>> type(x) <class 'tuple'> |
以上の様に、(整数, )
と記載する様にしましょう。
その様に記載すれば、type()
は 'tuple'
と出力されます。
他のシーケンスからtuple()
によりタプルを作成する
tuple()
を使用する事で他のシーケンス、例えば range
や list
から変更する事ができます。
1 2 3 4 5 6 7 8 9 10 11 12 | >>> x = tuple("sanfujinkainotechou") >>> print(x) ('s', 'a', 'n', 'f', 'u', 'j', 'i', 'n', 'k', 'a', 'i', 'n', 'o', 't', 'e', 'c', 'h', 'o', 'u') >>> y = tuple(range(3, 8)) >>> print(y) (3, 4, 5, 6, 7) >>> z = tuple(range(4, 9)) >>> print(z) (4, 5, 6, 7, 8) >>> w = tuple() >>> print(w) () |
タプルの特徴
ここで、tuple の特徴についてまとめていきます。
タプル tupleを使用する際には x = (6)
ではなく x = (6, )
の様に 整数, と記載する必要があります。
タプル(tuple) の使用方法の注意点
- タプル tuple では格納されている要素の新規登録は出来ません。
- タプル tuple ではタプル内容の更新をする事ができません。
- タプル tuple ではタプル内容の削除が出来ません。
では、タプルで行う事ができるのは何でしょうか。
タプル tuple
で行う事ができるのは参照をする事、検索をする事です。
まずは参照の仕方について見ていきましょう。
タプルを用いた要素の参照の仕方(スライス)について
参照の方法は他のシーケンスと同様に「スライス」を使います。
タプル tuple
の一般的な使用方法は以下となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | >>> num_try = tuple(range(1, 21)) >>> print(num_try) (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) >>> num_try[1] 2 >>> num_try[11] 12 >>> num_try[19] 20 >>> num_try[1:19] (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19) >>> num_try[:10] (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) >>> num_try[15:] (16, 17, 18, 19, 20) >>> num_try[-1:] (20,) >>> num_try[:-1] (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19) >>> num_try[2:18:3] (3, 6, 9, 12, 15, 18) >>> num_try[::2] (1, 3, 5, 7, 9, 11, 13, 15, 17, 19) >>> num_try[::] (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) >>> |
以上の様にタプル tuple
の使い方はリスト list
や 文字列の使い方とほぼ変わりません。
更に、タプル tuple
ではアンパックで各要素を別の変数に代入することも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | >>> x = (1, 2, 3) >>> a, b, c = x >>> print(a) 1 >>> print(b) 2 >>> print(c) 3 >>> num_try = (15, 25, 35) >>> a, b, c = num_try >>> print(a) 15 >>> print(b) 25 >>> print(c) 35 |
Pythonでは、タプルやリストの要素を展開して複数の変数に代入することができる。シーケンスのアンパック (sequence unpacking) やアンパック代入などと呼ばれる。
>> 'note.nk.mk.me' 「Pythonでタプルやリストをアンパックする方法」
タプルを用いた要素の検索の仕方について
タプル tuple で検索を行う際には、他のシーケンスと同様にcount()
と index()
が利用できます。
count()
は数を表し、index()
は番号を表します。
また、in
を使用する事で文字が収納されているかどうかを調べることもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | >>> tuple_str = tuple("sanfujinkainotechou") >>> print(tuple_str) ('s', 'a', 'n', 'f', 'u', 'j', 'i', 'n', 'k', 'a', 'i', 'n', 'o', 't', 'e', 'c', 'h', 'o', 'u') >>> tuple_str.count("j") 1 >>> tuple_str.count("u") 2 >>> tuple_str.count("f") 1 >>> tuple_str.count("k") 1 >>> tuple_str.index("u") 4 >>> tuple_str.index("n") 2 >>> "z" in tuple_str<br />False<br />>>> "u" in tuple_str<br />True |
タプルを用いたzip()の使い方について
zip()
を用いる事で、複数のタプル tupleリストを1つにまとめることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | >>> x1 = [1, 2, 3, 4] >>> x2 = [5, 6, 7, 8] >>> x3 = [9, 10, 11, 12] >>> x4 = [13, 14, 15, 16, 17] >>> temp_x = zip(x1, x2, x3, x4) >>> y = list(temp_x) >>> print(y) [(1, 5, 9, 13), (2, 6, 10, 14), (3, 7, 11, 15), (4, 8, 12, 16)] >>> print(y[0]) (1, 5, 9, 13) >>> print(y[1]) (2, 6, 10, 14) >>> print(y[2]) (3, 7, 11, 15) >>> print(y[3]) (4, 8, 12, 16) >>> print(y[4]) Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range >>> type(y[3]) <class 'tuple'> |
print(y[4])
は存在しないため、Errorが出ました。
また、ここで重要な事は新しく出来たlist から抽出される縦に並ぶリストは一括してまとめられて、これもまたlist
になります。
Pythonの組み込み関数
zip()
は複数のイテラブルオブジェクト(リストやタプルなど)の要素をまとめる関数。forループで複数のリストの要素を取得する際などに使う。
>> 'note.nk.mk.me' 「zip関数の使い方」
以上、今回はzip 関数についても考えていきましょう。
enurament について
enumerate()
を使うと、(カウンタ数, リストの順番)
のタプルを収納したリスト作成が出来ます。
Pythonの
enumerate()
関数を使うと、forループの中でリスト(配列)などのイテラブルオブジェクトの要素と同時にインデックス番号(カウント、順番)を取得できる。
>> 'note.nk.mk.me' 「Python enumerateの使い方」
ここで基本的な enumerate()
の使い方の例についてコードで示します。
1 2 3 4 5 | >>> x = ["a", "b", "c", "d", "e", "f"] >>> y = enumerate(x) >>> z = list(y) >>> print(z) [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f')] |
以上基本的な enumerate()
の使い方をマスターしましょう。
まとめ| Pythonのタプルの使用法
今回はpythonのシーケンスの一つであるタプル tuple の使用法法について学習しました。
シーケンスをある程度マスターする事ができれば、更に表現できる分野が広がりますので、是非更に学習を積み立てていきましょう。
その他 enumerate 関数に関して有用なサイトを引用しておきます。
参考になれば幸いです。
» Pythonでenumrate関数を使う方法