Ad

リストとタプルの特長と違い anchor.png Edit

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[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つのみだと、うっかり間違って「,」を付けずにエラーを出してしまうことが良くあり、要注意です。

Page Top

タプルの必要性 anchor.png Edit

「リストだけで良いのでは」と思われると思いますが、正直こだわらなければその通りです。ただし、タプルは実行速度がリストよりも少し速いというメリットがあります。他に辞書オブジェクトのキーとしても使えるという特徴があります。また明示的に変更を禁止したいときにも有用です。ただし、要素は変更不可といっても、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
Page Top

リストとタプルの相互変換 anchor.png Edit

タプルをリストに、リストをタプルにするのはそれぞれ「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)

Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 1127, today: 1, yesterday: 0
Princeps date: 2016-07-23 (Sat) 11:39:41
Last-modified: 2017-01-02 (Mon) 06:34:39 (JST) (868d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF