2: 2016-07-23 (土) 11:41:20 njf[6] [7] [8] | 3: 2016-12-27 (火) 09:12:52 njf[6] [9] [10] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | Pythonを始めて、インデントの制御構造の他に最初に何それと思うのがタプル。 | + | Pythonを始めて、インデントの制御構造の他に最初に何それと思うのがタプルでしょう。 |
- | 簡単に言うと、リスト=普通の配列、タプル=変更できないリスト | + | 簡単に言うと、「リスト=普通の配列」、「タプル=変更できないリスト」です |
+ | |||
+ | リストは変更可能で、 | ||
- | リストは変更可能 | ||
>>> a = [1,2,3] | >>> a = [1,2,3] | ||
>>> a[2] = 10 | >>> a[2] = 10 | ||
Line 9: | Line 10: | ||
[1, 2, 10] | [1, 2, 10] | ||
- | タプルは変更しようとするとエラー | + | 一方、タプルは変更しようとするとエラーが発生します。 |
>>> a = (1,2,3) | >>> a = (1,2,3) | ||
>>> a[2] = 10 | >>> a[2] = 10 | ||
Line 16: | Line 17: | ||
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) | ||
Line 22: | Line 23: | ||
[1, 2, 3, 2] | [1, 2, 3, 2] | ||
- | タプルは連結ができる。これはもとのタプルを変更しているのではなく、タプルを作り直している。 | + | タプルでは連結ができますが、これはもとのタプルを変更しているのではなく、タプルを作り直しています。 |
>>> a = (1,2) | >>> a = (1,2) | ||
Line 29: | Line 30: | ||
(1, 2, 1) | (1, 2, 1) | ||
- | 要素一つのタプルは(1,)のようにコンマをつける。 | + | 要素一つのタプルは(1,)のようにコンマをつけます。 |
- | つけないと単なるグループ化と思われて、ただの数字の1となる。 | + | つけないと単なるグループ化と思われて、ただの数字の1となってしまいます。 |
>>> a = (1) | >>> a = (1) | ||
Line 38: | Line 39: | ||
>>> a | >>> a | ||
(1,) | (1,) | ||
+ | |||
+ | これは関数の引数などにタプルが必要な時、その要素が1つのみだと、うっかり間違って「,」を付けずにエラーを出してしまうことが良くあり、要注意です。 | ||
+ | |||
+ | |||
+ | 「リストだけで良いのでは」と思われると思いますが、正直その通りです。ただし、タプルは実行速度がリストよりも少し速いというメリットがあります。他に辞書オブジェクトのキーとしても使えるという特徴があります。他に明示的に変更を禁止したいときにも有用です。 | ||
+ | |||
+ | 実際にはメリットが生かされる場面はちょっと少ないかも知れません。そのわりによく使われるので、他の人のコードなどを読むとき、各種関数や記法を使う時にも必要なので覚えておきましょう。 | ||
+ | |||
+ | 例えば、文字列をフォーマットする%記法ではタプルでないとエラーとなります。 | ||
+ | |||
+ | >>> "%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 |
(This host) = https://njf.jp