回答:
A list
は順序を維持しdict
、set
しない:順序を気にする場合は、使用する必要がありますlist
(もちろん、コンテナーの選択がこれら3つに限定されている場合は、;-)。
dict
各キーのA値を持つ仲間が、一方でlist
とset
明らかに、非常に異なる使用例:ちょうど値が含まれています。
set
アイテムはハッシュ可能である必要がありますが、ハッシュ可能でlist
はありません。ハッシュ可能でないアイテムがある場合は、使用できずset
、代わりにを使用する必要がありますlist
。
set
重複を禁止します。禁止list
しません。これも重要な違いです。(重複を複数のアイテムの異なる数にマッピングする「マルチセット」はにありますcollections.Counter
- dict
何らかの理由でインポートできなかった場合collections
、または2.7より前のバージョンでは、として作成できます。Pythonをとしてcollections.defaultdict(int)
、アイテムをキーとして使用し、関連する値をカウントとして使用します)。
a set
(またはdict
、キーの)の値のメンバーシップのチェックは非常に高速です(一定の短い時間を要します)。一方、リストでは、平均および最悪の場合、リストの長さに比例して時間がかかります。したがって、ハッシュ可能なアイテムがある場合、順序や重複を気にせず、迅速なメンバーシップチェックが必要な場合set
は、よりも優れていlist
ます。
一意の要素の順序付けられていないコレクションが必要な場合は、を使用しset
ます。(たとえば、ドキュメントで使用されるすべての単語のセットが必要な場合)。
要素の不変の順序付きリストを収集する場合は、を使用しtuple
ます。(たとえば、セットの要素として使用したい(name、phone_number)ペアが必要な場合、セットには要素が不変であるため、リストではなくタプルが必要になります)。
要素の変更可能な順序付けされたリストを収集する場合は、を使用しlist
ます。(たとえば、リストに新しい電話番号を追加する場合:[number1、number2、...])。
キーから値へのマッピングが必要な場合は、を使用しdict
ます。(たとえば、名前を電話番号にマップする電話帳が必要な場合:) {'John Smith' : '555-1212'}
。辞書のキーは順序付けされていないことに注意してください。(辞書(電話帳)を反復処理する場合、キー(名前)が任意の順序で表示されることがあります)。
要するに、使用:
list
-注文したアイテムのシーケンスが必要な場合。
dict
-値をキーに関連付ける必要がある場合
set
-固有の要素を保持する必要がある場合。
リストは変更可能なシーケンスであり、通常、同種のアイテムのコレクションを格納するために使用されます。
リストは、すべての一般的なシーケンス操作を実装します。
x in l
そして x not in l
l[i]
、l[i:j]
、l[i:j:k]
len(l)
、min(l)
、max(l)
l.count(x)
l.index(x[, i[, j]])
-第1回発生した指数x
でl
(またはそれ以降にi
と前j
indeces)リストは、すべての変更可能なシーケンス操作も実装します。
l[i] = x
-アイテムi
のl
置き換えられますx
l[i:j] = t
-のスライスl
からi
へj
反復可能な内容に置き換えられますt
del l[i:j]
- と同じ l[i:j] = []
l[i:j:k] = t
-の要素 l[i:j:k]
がt
del l[i:j:k]
-の要素を削除します s[i:j:k]
リストからl.append(x)
-追加 x
シーケンスの最後にしますl.clear()
-からすべてのアイテムを削除します l
(delと同じl[:]
)l.copy()
-の浅いコピーを作成します l
(と同じl[:]
)のl.extend(t)
またはl += t
-拡張l
の内容でt
l *= n
-アップデート l
の内容とは、繰り返しn
回l.insert(i, x)
-挿入x
へl
指定れたインデックスにますi
l.pop([i])
-でアイテムを取得し、i
そこからも削除しますl
l.remove(x)
-最初のアイテムをl
どこから削除するl[i]
-xに等しいl.reverse()
-の項目を反転させるl
場所でメソッドを利用してリストをスタックとして使用しappend
、pop
。
辞書はハッシュ可能な値を任意のオブジェクトにマッピングします。辞書は変更可能なオブジェクトです。辞書の主な操作は、キーを使用して値を格納し、キーを指定して値を抽出することです。
ディクショナリでは、ハッシュ化できない値、つまり、リスト、ディクショナリ、またはその他の変更可能なタイプを含む値をキーとして使用できません。
セットは、個別のハッシュ可能なオブジェクトの順序付けられていないコレクションです。セットは通常、メンバーシップテスト、シーケンスからの重複の削除、交差、和集合、差、対称差などの数学演算の計算に使用されます。
これはset
sをカバーしていませんが、dict
sとlist
sの良い説明です:
リストとは、見た目、つまり値のリストです。それぞれにゼロから番号が付けられます-最初の番号はゼロ、2番目の1、3番目の2などの番号が付けられます。リストから値を削除し、最後に新しい値を追加できます。例:たくさんの猫の名前。
辞書は、その名前が示唆するものに似ています-辞書。辞書には、単語の「インデックス」があり、それぞれに定義があります。Pythonでは、単語は「キー」と呼ばれ、定義は「値」と呼ばれます。辞書の値には番号が付けられていません-その名前が示唆するものに似た風袋-辞書。辞書には、単語の「インデックス」があり、それぞれに定義があります。辞書の値には番号が付けられていません-それらは特定の順序にもありません-キーは同じことをします。辞書の値を追加、削除、変更できます。例:電話帳。
C ++の場合、私は常にこのフローチャートを念頭に置いていました。どのシナリオで特定のSTLコンテナーを使用しますか?なので、Python3でも同様のものが利用できるかどうか知りたくてたまらなかった。
Pythonについて覚えておく必要があるのは、C ++のように単一のPython標準がないことです。したがって、異なるPythonインタープリター(CPython、PyPyなど)には大きな違いがある可能性があります。次のフローチャートはCPython用です。
:さらに、私は、ダイアグラムに次のようなデータ構造を組み込むための良い方法を発見したbytes
、byte arrays
、tuples
、named_tuples
、ChainMap
、Counter
、とarrays
。
OrderedDict
およびdeque
経由で利用可能ですcollections
モジュール。heapq
から入手可能です heapq
モジュールですLifoQueue
、Queue
、およびPriorityQueue
を介して利用可能であるqueue
同時(スレッド)のアクセスのために設計されたモジュール。(multiprocessing.Queue
利用可能なものもありますが、違いはわかりませんが、queue.Queue
プロセスからの同時アクセスが必要な場合に使用する必要があると想定しています。)dict
、set
、frozen_set
、そしてlist
もちろんビルトインされています誰にとっても、この答えを改善し、あらゆる面でより良い図を提供していただければ幸いです。お気軽にどうぞ。
PS:ダイアグラムはyedで作成されています。graphmlファイルはこちら
リスト、辞書、セットと組み合わせて、別の興味深いPythonオブジェクトであるOrderedDictsもあります。
順序付き辞書は通常の辞書と同じですが、アイテムが挿入された順序を記憶しています。順序付けされたディクショナリを反復する場合、項目は、キーが最初に追加された順序で返されます。
OrderedDictsは、ドキュメントの操作など、キーの順序を維持する必要がある場合に役立ちます。ドキュメント内のすべての用語のベクトル表現が必要になることはよくあります。したがって、OrderedDictsを使用すると、用語が以前に読み込まれたかどうかを効率的に確認し、用語を追加し、用語を抽出し、すべての操作の後に、それらの順序付けられたベクトル表現を抽出できます。
リストとは、見た目、つまり値のリストです。それらのそれぞれにゼロから番号が付けられます-最初のものはゼロ、2番目の1、3番目の2などの番号が付けられます。リストから値を削除し、最後に新しい値を追加できます。例:たくさんの猫の名前。
タプルはリストと同じですが、値を変更することはできません。最初にそれをあきらめる値は、プログラムの残りの部分で行き詰まっている値です。ここでも、参照しやすいように、各値にはゼロから番号が付けられています。例:年の月の名前。
辞書は、その名前が示唆するものに似ています-辞書。辞書には、単語の「インデックス」があり、それぞれに定義があります。Pythonでは、単語は「キー」と呼ばれ、定義は「値」と呼ばれます。辞書の値には番号が付けられていません-その名前が示唆するものに似た風袋-辞書。辞書には、単語の「インデックス」があり、それぞれに定義があります。Pythonでは、単語は「キー」と呼ばれ、定義は「値」と呼ばれます。辞書の値には番号が付けられていません-それらは特定の順序にもありません-キーは同じことをします。辞書の値を追加、削除、変更できます。例:電話帳。
それらを使用するとき、私はあなたの参照のためにそれらの方法の徹底的なチートシートを作ります:
class ContainerMethods:
def __init__(self):
self.list_methods_11 = {
'Add':{'append','extend','insert'},
'Subtract':{'pop','remove'},
'Sort':{'reverse', 'sort'},
'Search':{'count', 'index'},
'Entire':{'clear','copy'},
}
self.tuple_methods_2 = {'Search':'count','index'}
self.dict_methods_11 = {
'Views':{'keys', 'values', 'items'},
'Add':{'update'},
'Subtract':{'pop', 'popitem',},
'Extract':{'get','setdefault',},
'Entire':{ 'clear', 'copy','fromkeys'},
}
self.set_methods_17 ={
'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
'Subtract':{'pop', 'remove','discard'},
'Relation':{'isdisjoint', 'issubset', 'issuperset'},
'operation':{'union' 'intersection','difference', 'symmetric_difference'}
'Entire':{'clear', 'copy'}}