3: 2016-12-27 (火) 09:12:52 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 |
| + | |
| + | でももちろん同じではありません。 |
| 簡単に言うと、「リスト=普通の配列」、「タプル=変更できないリスト」です | | 簡単に言うと、「リスト=普通の配列」、「タプル=変更できないリスト」です |
| | | |
| これは関数の引数などにタプルが必要な時、その要素が1つのみだと、うっかり間違って「,」を付けずにエラーを出してしまうことが良くあり、要注意です。 | | これは関数の引数などにタプルが必要な時、その要素が1つのみだと、うっかり間違って「,」を付けずにエラーを出してしまうことが良くあり、要注意です。 |
| | | |
| + | **タプルの必要性 [#ic6cb521] |
| + | 「リストだけで良いのでは」と思われると思いますが、正直こだわらなければその通りです。ただし、タプルは実行速度がリストよりも少し速いというメリットがあります。他に辞書オブジェクトのキーとしても使えるという特徴があります。また明示的に変更を禁止したいときにも有用です。ただし、要素は変更不可といっても、Pythonには定数が定義できないので、タプル丸ごと変更は可能です。 |
| | | |
- | 「リストだけで良いのでは」と思われると思いますが、正直その通りです。ただし、タプルは実行速度がリストよりも少し速いというメリットがあります。他に辞書オブジェクトのキーとしても使えるという特徴があります。他に明示的に変更を禁止したいときにも有用です。 | |
| | | |
- | 実際にはメリットが生かされる場面はちょっと少ないかも知れません。そのわりによく使われるので、他の人のコードなどを読むとき、各種関数や記法を使う時にも必要なので覚えておきましょう。 | + | 実際にはメリットが生かされる場面はちょっと少ないかも知れません。 |
| + | そのわりによく使われるので、他の人のコードなどを読む時や、各種関数や記法を使う時にも必要なので覚えておきましょう。 |
| | | |
| 例えば、文字列をフォーマットする%記法ではタプルでないとエラーとなります。 | | 例えば、文字列をフォーマットする%記法ではタプルでないとエラーとなります。 |
| File "<stdin>", line 1, in <module> | | File "<stdin>", line 1, in <module> |
| TypeError: not enough arguments for format string | | 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) |