1: 2016-07-23 (土) 11:39:41 njf |
現: 2017-01-02 (月) 14:34:39 njf |
- | Pythonを始めて、インデントの制御構造の他に最初に何それと思うのがタプル。 | + | *リストとタプルの特長と違い [#ib7669e3] |
| | | |
- | 簡単に言うと、リスト=普通の配列、タプル=変更できないリスト | + | Pythonを始めて、インデントの制御構造の他に最初に何それと思うのがタプルでしょう。普通の配列のようなリストもあるのにタプルは何だろうと最初見たとき思いました。 |
| + | |
| + | リストは「[]」で定義して、タプルは「()」で定義します。 |
| + | |
| + | list_data = [1,2,3,4] |
| + | tuple_data = (1,2,3,4) |
| + | |
| + | 使う時は[]を使って各要素にアクセスするので、簡単な使い方ではどちらも似たような物に見えます。 |
| + | |
| + | print list_data[1] |
| + | print tuple_data[1] |
| + | 結果 |
| + | 2 |
| + | 2 |
| + | |
| + | でももちろん同じではありません。 |
| + | 簡単に言うと、「リスト=普通の配列」、「タプル=変更できないリスト」です |
| + | |
| + | リストは変更可能で、 |
| | | |
- | リストは変更可能 | |
| >>> a = [1,2,3] | | >>> a = [1,2,3] |
| >>> a[2] = 10 | | >>> a[2] = 10 |
| [1, 2, 10] | | [1, 2, 10] |
| | | |
- | タプルは変更しようとするとエラー | + | 一方、タプルは変更しようとするとエラーが発生します。 |
| >>> a = (1,2,3) | | >>> a = (1,2,3) |
| >>> a[2] = 10 | | >>> a[2] = 10 |
| TypeError: 'tuple' object does not support item assignment | | TypeError: 'tuple' object does not support item assignment |
| | | |
- | リストは「append」で追加できる | + | リストは「append」で追加できます。 |
- | >>> a = [1,2,3] | + | >>> a = [1,2,3] |
- | >>> a.append(2) | + | >>> a.append(2) |
- | >>> a | + | >>> a |
- | [1, 2, 3, 2] | + | [1, 2, 3, 2] |
| | | |
- | タプルは連結ができる。これはタプルを作り直している。 | + | タプルでは連結ができますが、これはもとのタプルを変更しているのではなく、タプルを作り直しています。 |
| | | |
| >>> a = (1,2) | | >>> a = (1,2) |
| (1, 2, 1) | | (1, 2, 1) |
| | | |
- | 要素一つのタプルは(1,)のようにコンマをつける。 | + | 要素一つのタプルは(1,)のようにコンマをつけます。 |
- | つけないと単なるグループ化と思われて、ただの数字の1となる。 | + | つけないと単なるグループ化と思われて、ただの数字の1となってしまいます。 |
| | | |
| >>> a = (1) | | >>> a = (1) |
| >>> a | | >>> a |
| (1,) | | (1,) |
| + | |
| + | これは関数の引数などにタプルが必要な時、その要素が1つのみだと、うっかり間違って「,」を付けずにエラーを出してしまうことが良くあり、要注意です。 |
| + | |
| + | **タプルの必要性 [#ic6cb521] |
| + | 「リストだけで良いのでは」と思われると思いますが、正直こだわらなければその通りです。ただし、タプルは実行速度がリストよりも少し速いというメリットがあります。他に辞書オブジェクトのキーとしても使えるという特徴があります。また明示的に変更を禁止したいときにも有用です。ただし、要素は変更不可といっても、Pythonには定数が定義できないので、タプル丸ごと変更は可能です。 |
| + | |
| + | |
| + | 実際にはメリットが生かされる場面はちょっと少ないかも知れません。 |
| + | そのわりによく使われるので、他の人のコードなどを読む時や、各種関数や記法を使う時にも必要なので覚えておきましょう。 |
| + | |
| + | 例えば、文字列をフォーマットする%記法ではタプルでないとエラーとなります。 |
| + | |
| + | >>> "%s is a %s" % ("This","test") |
| + | 'This is a test' |
| + | |
| + | |
| + | >>> "%s is a %s" % ["This","test"] |
| + | Traceback (most recent call last): |
| + | File "<stdin>", line 1, in <module> |
| + | TypeError: not enough arguments for format string |
| + | |
| + | *リストとタプルの相互変換 [#xe5e56c0] |
| + | |
| + | タプルをリストに、リストをタプルにするのはそれぞれ「list」「tuple」関数を使います。 |
| + | |
| + | tuple_data = (1,2,3,4) |
| + | list_data = list(tuple_data) |
| + | |
| + | print list_data |
| + | |
| + | print tuple(list_data) |
| + | |
| + | 関数 |
| + | [1, 2, 3, 4] |
| + | (1, 2, 3, 4) |