1. ホーム
  2. python

[解決済み] リストとタプルの違いは何ですか?

2022-03-21 13:59:18

質問

何が違うのですか?

タプル/リストの利点/欠点は何ですか?

どのように解決するのですか?

タプルは不変であるということ以外に、その使い方を導くべき意味上の区別があります。タプルは異種データ構造(すなわち、そのエントリーが異なる意味を持つ)であるのに対し、リストは同種のシーケンスです。 タプルには構造があり、リストには順序がある。

この区別をすることで、コードがより明示的になり、理解しやすくなります。

例えば、本の中の場所を参照するためのページ番号と行番号のペアは、次のようなものである。

my_location = (42, 11)  # page number, line number

そして、これを辞書のキーとして、場所に関するメモを保存することができます。一方、リストは複数の場所を保存するために使用することができる。当然、リストに場所を追加したり、削除したりすることができる。一方、既存の場所から項目を追加したり削除したりすることは意味がない。したがって、タプルは不変である。

例えば、ページの行を反復するときなど、既存のロケーションタプルの中の項目を変更したい場合があるかもしれません。しかし、タプルの不変性により、新しい値ごとに新しい位置タプルを作成することを余儀なくされる。これは一見不便に見えますが、このように不変なデータを使うことは、値型や関数型プログラミング技術の基礎であり、大きな利点となります。

この問題については、例えば、以下のような興味深い記事があります。 Pythonのタプルは単なる定数リストではありません"。 または "Pythonのタプルとリストを理解する" . Pythonの公式ドキュメント も言及しています。

<ブロッククオート

"タプルは不変であり、通常、異種列を含む ..."。

のような静的型付け言語では ハスケル タプルの値は一般的に異なる型を持ち、タプルの長さは固定でなければなりません。リストでは、値はすべて同じ型であり、長さは固定されていない。だから、この違いは非常に明白だ。

最後に 名前付きタプル Pythonでは、タプルはすでに構造を持っていると考えられているので、これは理にかなっています。これは、タプルがクラスやインスタンスに代わる軽量な代替品であるという考えを強調しています。