これらの組み込みPythonデータ型:リスト、シーケンスおよびスライスの違いは何ですか?私はそれを見る、3つすべては本質的にC++とJava呼び出し配列。
list
は単なる配列以上のものです。アイテム数を指定せずに初期化できます。あなたはそれらにappend
/Push
することができます、あなたはそれらからremove
/pop
/del
アイテムをすることができます、あなたは異なるリストを持つことができますオブジェクトのタイプ(例:_[1,'e', [3]]
_)、再帰リストを持つことができます...そしてリストをスライスすることができます。これは、いくつかのアイテムのみで新しいリストを取得することを意味します。slice
は、help(slice)
が示すように、_a[start:stop:step]
_形式で拡張スライスを処理するために「舞台裏」で使用されるオブジェクトタイプです。「シーケンス」はオブジェクトではなく、list
のようないくつかのオブジェクトが実装する非公式のインターフェースのようなものです。
あなたはあなたの質問に非常に異なるものを混ぜているので、私はただ別の質問に答えます;-P
あなたは今、Pythonで最も重要なインターフェースの1つについて質問しています:iterable
-基本的にはfor elem in iterable
のように使用できるものなら何でもです。
iterable
には、sequence
、generator
、およびmapping
の3つの子孫があります。
sequenceは、ランダムアクセスで反復可能です。シーケンスの前にアイテムを消費することなく、シーケンスの任意のアイテムを要求できます。このプロパティを使用すると、一度に複数の要素を提供するslices
を作成できます。スライスはサブシーケンスseq[from:until]
とn番目ごとのアイテム:seq[from:until:nth]
を与えることができます。 list
、Tuple
、およびstr
はすべてシーケンスです。
整数位置ではなくキーを介してアクセスする場合は、マッピングになります。 dict
は基本的なマッピングです。
最も基本的な反復可能はgeneratorです。ランダムアクセスをサポートしていないため、スライスはサポートされていません。あなたはそれらが与えられた順序ですべてのアイテムを消費しなければなりません。ジェネレーターは通常、アイテムを反復処理した場合にのみアイテムを作成します。 generators
を作成する一般的な方法は、ジェネレータ式です。 (f(x) for x in y)
のように丸括弧が付いていることを除けば、リスト内包表記とまったく同じように見えます。 yield
キーワードを使用する関数を呼び出すと、ジェネレーターも返されます。
すべてのイテレータに共通のアダプタはイテレータです。 iterators
は、サポートする最も基本的なタイプであるgenerator
と同じインターフェースを持っています。これらは、イテラブルでiter
を呼び出すことによって明示的に作成され、あらゆる種類のループ構造で暗黙的に使用されます。
リストはシーケンスですが、シーケンスは必ずしもリストではありません。シーケンスは、シーケンスインターフェイス(「プロトコル」)をサポートする任意のタイプです。これは、厳密な継承階層ではなく、ダックタイピングによって行われます。シーケンスはコンテナですが、コンテナは必ずしもシーケンスではないことに注意してください。 (シーケンスは、まあ、シーケンシャルです!)
http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-Tuple-buffer-xrange を参照してください。
スライスオブジェクトは通常、シンタックスシュガー(foo[2:5]
)を介して暗黙的に作成され、オーバーライドできるコンテナタイプの特別なメソッド(__getitem__
など)に提供されます。独自のシーケンス/コンテナを作成しない限り、通常はスライスを処理する必要はありません。
http://docs.python.org/reference/datamodel.html#specialnames を参照してください
リストは配列に相当します。確かではありませんが、動的に拡張する配列としてcPythonに実装されていると思います。ただし、インターフェイスを使用すると、単なる古い配列というよりも、C++ STLベクターのようになります。
listsは、配列に似たシーケンスタイプです
sequenceタイプは、機能的なスーパーセットを記述します。
シーケンスタイプには、文字列、Unicode文字列、リスト、タプル、バッファ、およびxrangeオブジェクトの6つがあります。
続きを読む... http://docs.python.org/glossary.html
厳密に言えば、スライスはインデックスの範囲を表すタイプです。スタート、ストップ、そしてステップ。スライスはコンテナタイプではありません。スライスを使用してリストにインデックスを付けると、元のリストのサブリストのコピーである新しいリストが作成されます。
リストは、異種であるという点でC++配列とは異なります。要素は同じタイプである必要はありません。そして、MYYNがすでに指摘しているように、「シーケンス」はPython型ではなく、さまざまな組み込み型の説明です。