ページへ戻る

− Links

 印刷 

Python​/リストとタプル のバックアップソース(No.3) :: NJF Wiki

xpwiki:Python/リストとタプル のバックアップソース(No.3)

« Prev[5]  Next »[6]
Pythonを始めて、インデントの制御構造の他に最初に何それと思うのがタプルでしょう。

簡単に言うと、「リスト=普通の配列」、「タプル=変更できないリスト」です

リストは変更可能で、

 >>> a = [1,2,3]
 >>> a[2] = 10
 >>> a
 [1, 2, 10]

一方、タプルは変更しようとするとエラーが発生します。
 >>> a = (1,2,3)
 >>> a[2] = 10
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
 TypeError: 'tuple' object does not support item assignment

リストは「append」で追加できます。
 >>> a = [1,2,3]
 >>> a.append(2)
 >>> a
 [1, 2, 3, 2]

タプルでは連結ができますが、これはもとのタプルを変更しているのではなく、タプルを作り直しています。

 >>> a = (1,2)
 >>> b = a + (1,)
 >>> b
 (1, 2, 1)

要素一つのタプルは(1,)のようにコンマをつけます。
つけないと単なるグループ化と思われて、ただの数字の1となってしまいます。

 >>> a = (1)
 >>> a
 1
 >>> a = (1,)
 >>> a
 (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

« Prev[5]  Next »[6]