最後の要素(-1でインデックスが付けられている)を削除して返すa がすでにあるのに、Pythonのlist.append関数が呼び出さlist.pushれない理由を誰かが知っていますか?list.poplist.appendセマンティクスがその使用と一致している場合ていますか?
popリストのどこからでもアイテムをポップできます。 appendリストの真ん中に何かを「プッシュ」することはできません。
最後の要素(-1でインデックスが付けられている)を削除して返すa がすでにあるのに、Pythonのlist.append関数が呼び出さlist.pushれない理由を誰かが知っていますか?list.poplist.appendセマンティクスがその使用と一致している場合ていますか?
popリストのどこからでもアイテムをポップできます。 appendリストの真ん中に何かを「プッシュ」することはできません。
回答:
「ポップ」が考えられるよりずっと前に「追加」が存在していたからです。Python 0.9.1は、1991年の初めにlist.appendをサポートしました。比較として、1997年にpopを追加することに関するcomp.lang.pythonに関する議論の一部を以下に示します。Guidoは次のように書いています。
スタックを実装するには、list.pop()プリミティブを追加する必要があります(いいえ、原則に基づいてこの特定のものに反対しているわけではありません)。list.push()はlist.pop()との対称性のために追加できますが、同じ操作に複数の名前を付けるのはあまり好きではありません。遅かれ早かれ、もう1つを使用するコードを読むことになるので、両方を学習する必要があります。これはより認知的な負荷です。
また、彼がpush / pop / put / pullが要素[0]にあるのか、要素[-1]の後にあるのか、アイコンのリストへの参照を投稿するのかについて、彼が議論していることも確認できます。
これはすべてリストオブジェクトの実装から除外するのが最善だと思います-特定のセマンティクスでスタックまたはキューが必要な場合は、リストを使用する小さなクラスを記述します
言い換えれば、すでに高速のappend()とdel list [-1]をサポートしているPythonリストとして直接実装されたスタックの場合、list.pop()がデフォルトで最後の要素で機能することは理にかなっています。他の言語では異なる方法で行われる場合でも。
ここで暗黙的なのは、ほとんどの人がリストに追加する必要があるということですが、リストをスタックとして扱う機会が少ないため、list.appendが非常に早くに登場しました。
you're going to *read* code that uses the other one (...) which is more cognitive load「プッシュはありません」を覚えていると、コードを記述しているときに認知負荷が発生するだけです。「プッシュは追加の正確な同義語」であることを覚えておくと、使用頻度が低いと思われるものを読むたびに、認知的負荷が発生します。人々が読みやすさがしばしば読みやすさよりも優れていると考える理由の詳細については、stackoverflow.com / questions
追加するので; 押しません。「追加」はリストの最後に追加し、「プッシュ」は前に追加します。
キューとスタックを考えてください。
http://docs.python.org/tutorial/datastructures.html
編集: 2番目の文をより正確に言い換えると、「追加」とは、基礎となる実装に関係なく、リストの最後に何かを追加することを非常に明確に意味します。「プッシュ」されたときに新しい要素が追加される場所は、あまり明確ではありません。スタックにプッシュすることは「トップ」に何かを置くことですが、実際にそれが基礎となるデータ構造のどこに行くかは完全に実装に依存します。一方、キューにプッシュすることは、キューを最後に追加することを意味します。
pushが最後に追加されます。
list.popセマンティクスを考慮に入れて、list.append要素をスタックとして表示すると、リストに要素がプッシュされます。
リストに要素を追加するためですか?プッシュは通常、スタックを参照するときに使用されます。
「追加」は直感的に「リストの最後に追加」を意味するためです。「プッシュ」と呼ばれる場合、リストの末尾に追加するのか、リストの先頭に追加するのかは不明です。
pop操作があるので、これは意味がありません。以来pushとpop通常の操作をスタックし、一緒に行くされている、彼らが、リストの同じ端に作動することが期待されなければなりません。
公式な回答ではありませんが(言語の使用に基づく推測にすぎません)、Pythonではリストをスタックとして使用できます(たとえば、チュートリアルのセクション5.1.1)。ただし、リストは依然として最初にリストであるため、両方に共通する操作では、スタック用語(つまり、プッシュ)ではなくリスト用語(つまり、追加)を使用します。リストではpop操作はそれほど一般的ではないため( 'removeLast'を使用することもできます)、pop()を定義しましたが、push()は定義しませんでした。
OK、ここの個人的な意見ですが、AppendとPrependはセット内の正確な位置を意味します。
PushとPopは、セットのどちらかの端に適用できる実際の概念です...一貫している限り...何らかの理由で、私には、Push()は、セットする...
参考までに、pushメソッドを含むリストを作成することはそれほど難しくありません。
>>> class StackList(list):
... def push(self, item):
... self.append(item)
...
>>> x = StackList([1,2,3])
>>> x
[1, 2, 3]
>>> x.push(4)
>>> x
[1, 2, 3, 4]
スタックはやや抽象的なデータ型です。「プッシュ」と「ポップ」の考え方は、スタックが実際にどのように実装されているかに大きく依存しません。たとえば、理論的には次のようなスタックを実装できます(なぜそうするのかはわかりませんが)。
l = [1,2,3]
l.insert(0, 1)
l.pop(0)
...そしてリンクリストを使用してスタックを実装することに慣れていません。
プッシュは定義されたスタック動作です。Aをスタック(B、C、D)にプッシュすると、(A、B、C、D)になります。
Python追加を使用した場合、結果のデータセットは(B、C、D、A)のようになります。
編集:うわー、聖なる歩兵。
私の例から、リストのどの部分が一番上で、どの部分が一番下かは明らかだと思います。ここで私たちのほとんどが左から右に読んでいると仮定すると、リストの最初の要素は常に左側になります。
Pythonのオリジナルバージョン(C Python)がC ++ではなくCで記述されたためと考えられます。
リストを何かの後ろに押し込むことによってリストが形成されるという考えは、それらを追加するという考えほどよく知られていません。