2012-09-10 10 views
26

Pythonの集合とリストの唯一の違いは、2つの集合を比較するために共用、交差、差、対称差分関数を使用できるという事実ですか?これらの関数を単純にリストに適用できないのはなぜですか?どのような状況でセットはリストよりも有用ですか?Pythonのセットとリストの違いは何ですか?

+1

定義上、重複する値は含まれません。私は、Pythonは他の言語と同様に、リストに重複したエントリを入れることを想定しています。 –

+1

これはドキュメントの中でよく説明されています。 [Sets](http://docs.python.org/tutorial/datastructures.html#sets)と[Lists](http://docs.python.org/tutorial/datastructures.html#more-on-lists) –

答えて

54

大きな違いがあります。

  1. セットは(セットが順不同である理由である)
  2. セットは、ハッシュルックアップが使用されているセット内の要素を見つけるために
  3. 順不同である重複を含めることはできません。これにより、リストよりも、__contains__in演算子)がより効率的になります。
  4. セットにはハッシュ可能なアイテムしか含めることができません(#3を参照)。試してみると、set(([1],[2]))TypeErrorになります。

実用的なアプリケーションでは、リストは並べ替えや順序が非常にいいですが、重複しないようにしたい場合や順序を気にしないときには使いやすいです。

はまた、あなたがなど、順序を気にしないならば、あなたはsetlistとの交点を取得するために

new_set = myset.intersection(mylist) 

を使用できることに注意してください。

+2

また、セットにはハッシュ可能なオブジェクトのみを含めることができます。リストにはあらゆる種類のオブジェクトを含めることができます。 – kindall

+0

@kindall - それは#3の説明に暗黙のうちですが、より明示的にするため#4として追加しました。コメントありがとう。 – mgilson

5

sets - ユニークな要素

listsの順序なしコレクションは - 要素

setsのコレクションを命じたあなたは、このようintersectionuniondifference、およびsymmetric differenceなどの操作を行うには、数学の集合論のすなわち操作を可能にします。 Setsはインデックス作成を許可せず、ハッシュテーブルに実装されています。

listsは、実際には可変長配列であり、Lispスタイルのリンクリストではありません。リストでは、要素はインデックスによってアクセスされます。

2

いくつかのより多くの相違点は次のとおりです。

  1. リストセットができないのに対し、2-Dすることができます。
  2. リストが順序付けされている(IEはシリアル番号を持っています)リストは実行が比較的遅く、セットは高速です。
  3. PythonのリストはjavaまたはcのArrayのようなものです。
  4. セットを印刷すると、ほとんど常に異なる出力シーケンスが提供されます。
+1

セットは、「frozenset」を使用している限り、必要なだけ多くの次元にすることができます – Copperfield

2

セットは別個の要素の集合を表す。動作の高速化のために

  1. :Pythonでは、セットは、主に二つの理由(:スクラッチからのデータ・サイエンス、ジョエルGruceブック)のために使用されているではセットの非常に高速な操作です。大量の要素があり、メンバーシップテストを実行する場合は、リストの代わりにsetを使用するのが適切です。

  2. コレクション内の別個のアイテムを見つける。プログラマは、辞書とリストよりもはるかに少ない頻度でセットを使用します。

2

Pythonは設定:

セットユニークなアイテムの順不同のコレクションです。 setは、中括弧{}の中にコンマで区切られた値で定義されます。セット内のアイテムは注文されません。

セットは順序付けされていないコレクションであり、インデックス付けは意味を持ちません。したがってスライス演算子[]は機能しません。

>>> a = {1,2,2,3,3,3} 
>>> a 
set([1, 2, 3]) 
>>> a[1] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'set' object does not support indexing 

Pythonのリスト:

リスト項目の順序付けられたシーケンスです。これはPythonで最もよく使用されるデータ型の1つで、非常に柔軟性があります。リスト内のすべての項目が同じタイプである必要はありません。

リストを宣言するのはかなり簡単です。コンマで区切られた項目は角かっこ[]で囲まれています。

>>> a = [1, 2.2, 'python'] 

スライシング演算子[]を使用して、リストから項目または項目の範囲を抽出することができます。インデックスは、Pythonでフォーム0を開始します。

リストは変更可能です。つまり、リストの要素の値を変更することができます。

Reference

関連する問題