2008-09-03 9 views
36

私はクラスのためにPythonを学習しています。データ型の1つとしてタプルを取り上げました。私はWikipediaのページを読んでいますが、そのようなデータ型が実際にどこに役立つのか分かりませんでした。おそらくPythonでいくつかの例がありますが、不変な数値のセットが必要でしょうか?これはリストとどう違うのですか?タプルとは何ですか?

答えて

44
  • タプルは、関数から複数の結果を返す場合に使用されます。
  • これらは不変なので、辞書のキーとして使用できます(リストできません)。
+2

こせこせPLの人の視点から:Pythonは、複数のconflatingされますここの事;静的型付き言語では、 'tuple'型は、固定数の固定値を含む固定値を含む値と一致します。 E.G.、(string * int)、文字列と整数を含むタプルの型。しかし、動的に型付けされた言語では、この感覚は水没しているように見えます。不変性の概念は、一般にタプルに関連するものではありません。 Pythonは「タプル」という用語を共同で選んで再利用したようです。 –

+0

タプルも、タプルの知識が有用なenumerate()のようなコレクションオブジェクトによって返されます – Murphy

2

あなたは常にセットとして2つの以上のオブジェクトを扱うとき、私は彼らが便利。

1

リストは、機能に関しては(明らかに、dictのキーとしてのものを除いて)タプルを置き換えることができます。しかし、タプルは物事をより速くすることができます。たとえば、Javaの不変の文字列についても同じことが言えます。文字列を変更できないようにする必要があるのはいつですか?決して!

もっと良いプログラムを作るためにできることを制限することに関するまじめな議論を読んだだけです。 Why Why Functional Programming Matters Matters

18

タプルは、キーに複数のデータを結合する必要がある場合に、適切な辞書キーを作成し、クラスを作成する気がしません。

a = {} 
a[(1,2,"bob")] = "hello!" 
a[("Hello","en-US")] = "Hi There!" 

私は、この機能を主にメッシュの頂点の座標であるキーを持つ辞書を作成するために使用しました。しかし、私の特定のケースでは、関与山車の正確な比較は

+3

私はそれらを辞書のキーとして使うことは考えていませんでした。良いアイデア。 – crystalattice

1

[私はおそらく、固定小数点整数のいくつかの種類にあなたの着信山車を変換したい、その場合には]常にあなたの目的のために真実ではないかもしれないうまく働きましたタプルは複数の値を格納するのに便利です。タプルは不変なリストのようなものです - 例えば一度作成すると、要素を追加/削除/スワップすることはできません。

不変の1つの利点は、タプルが固定サイズであるため、実行時に特定の最適化を実行できることです。これは、戻り値や関数のパラメータのコンテキストでタプルが使用されている場合に特に有効です。

2

タプルとリストは一般的に同じ用途があります。不変のデータ型には多くの利点があり、主に並行性の問題があります。あなたは自然の中で揮発性ではないリストを持って、あなたは何の消費者がそれを変更されていないことを保証する必要がある場合

だから、あなたはタプルを使用することができます。このデータ変更は、典型的には単一のプロデューサがタプルをrebuilts場合

典型的な例は、等会社の部門、カテゴリ、等のアプリケーションでデータを固定されています。

8

this explanationが好きです。

基本的には、構造が一定である場合はタプルを使用する必要があります(1番目の値は常に1つの値型を保持し、2番目のタプルなどは同種の値のリストに使用する必要があります)。

もちろん例外はありますが、これは一般的なガイドラインです。

0

文字列%operationのように構文的に必要な場所と、複数の戻り値に加えて、軽量クラスの形式としてタプルを使用します。たとえば、あるメソッドから別のメソッドに渡された呼び出し元に不透明なCookieを渡すオブジェクトがあるとします。タプルは、それを含む別のクラスを定義することなく、複数の値をそのクッキーにパックするための良い方法です。

私はこの特定の使用について賢明にしようとします。クッキーがコード全体にわたって自由に使用されている場合は、クラスを作成する方が、その使用方法を文書化するのに役立ちます。それらが1つの場所(例えば、1組のメソッド)でのみ使用される場合は、タプルを使用することがあります。いずれにしても、Pythonであるため、タプルで始まり、呼び出し元のコードを変更することなくカスタムクラスのインスタンスに変更することができます。

0

タプルは一連の値です。値は任意の型にすることができ、整数でインデックス付けされるので、タプルはリストと似ていません。最も重要な違いは、のタプルは不変であることです。

タプルは、値をコンマで区切ったリストです:

t = 'p', 'q', 'r', 's', 't' 

括弧でタプルを囲むことをお勧めです:

t = ('p', 'q', 'r', 's', 't') 
関連する問題