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)

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 2774, today: 1, yesterday: 0
初版日時: 2016-07-23 (土) 11:39:41
最終更新: 2017-01-02 (月) 06:34:39 (JST) (2633d) by njf
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF