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