Adakah yang tahu mengapa list.append
fungsi Python tidak dipanggil list.push
mengingat sudah ada list.pop
yang menghapus dan mengembalikan elemen terakhir (yang diindeks pada -1) dan list.append
semantik konsisten dengan penggunaan itu?
265
pop
dapat mengeluarkan item dari mana saja dalam daftar.append
tidak dapat "mendorong" sesuatu ke tengah daftar.Jawaban:
Karena "append" sudah ada jauh sebelum "pop" dipikirkan. Python 0.9.1 mendukung list.append pada awal 1991. Sebagai perbandingan, inilah bagian dari diskusi tentang comp.lang.python tentang menambahkan pop pada tahun 1997. Guido menulis:
Anda juga dapat melihat dia membahas ide apakah push / pop / put / pull harus di elemen [0] atau setelah elemen [-1] di mana ia memposting referensi ke daftar Ikon:
Dengan kata lain, untuk tumpukan diimplementasikan secara langsung sebagai daftar Python, yang sudah mendukung append cepat (), dan daftar del [-1], masuk akal bahwa list.pop () bekerja secara default pada elemen terakhir. Bahkan jika bahasa lain melakukannya secara berbeda.
Tersirat di sini adalah bahwa kebanyakan orang perlu menambahkan ke daftar, tetapi lebih sedikit memiliki kesempatan untuk memperlakukan daftar sebagai tumpukan, itulah sebabnya list.append datang jauh lebih awal.
sumber
you're going to *read* code that uses the other one (...) which is more cognitive load
Mengingat "tidak ada dorongan" hanya memperkenalkan beban kognitif saat Anda menulis kode. Mengingat "push adalah sinonim yang tepat untuk menambahkan" memperkenalkan muatan kognitif setiap kali Anda membaca yang Anda lihat lebih jarang digunakan. Lihat stackoverflow.com/questions/3455488/… untuk lebih lanjut tentang mengapa orang berpikir keterbacaan seringkali mengalahkan kemampuan menulisKarena itu menambahkan; itu tidak mendorong. "Menambahkan" menambah di akhir daftar, "mendorong" menambahkan ke depan.
Pikirkan antrian vs. tumpukan.
http://docs.python.org/tutorial/datastructures.html
Sunting: Untuk menulis ulang kalimat kedua saya dengan lebih tepat, "Menambahkan" dengan sangat jelas menyiratkan menambahkan sesuatu ke akhir daftar, terlepas dari implementasi yang mendasarinya. Di mana elemen baru ditambahkan ketika "didorong" kurang jelas. Mendorong ke tumpukan adalah meletakkan sesuatu di "atas," tetapi di mana ia sebenarnya berada dalam struktur data yang mendasarinya sepenuhnya tergantung pada implementasi. Di sisi lain, mendorong ke antrian berarti menambahkannya ke akhir.
sumber
push
menambah sampai akhir.list.pop
semantik akun ,list.append
mendorong elemen ke dalam daftar, bila dilihat sebagai tumpukan.Karena itu menambahkan elemen ke daftar? Push biasanya digunakan ketika mengacu pada tumpukan.
sumber
Karena "tambahkan" secara intuitif berarti "tambahkan di akhir daftar". Jika itu disebut "push", maka tidak akan jelas apakah kita menambahkan barang di bagian ekor atau di bagian atas daftar.
sumber
pop
operasi. Karenapush
danpop
biasanya menumpuk operasi dan berjalan bersama, harus diharapkan bahwa mereka beroperasi di ujung daftar yang sama.Bukan jawaban resmi dengan cara apa pun (hanya tebakan berdasarkan penggunaan bahasa), tetapi Python memungkinkan Anda menggunakan daftar sebagai tumpukan (misalnya, bagian 5.1.1 dari tutorial ). Namun, daftar masih merupakan yang pertama dari semua daftar, sehingga operasi yang umum untuk keduanya menggunakan istilah daftar (yaitu, tambahkan) daripada istilah tumpukan (yaitu, push). Karena operasi pop tidak biasa dalam daftar (meskipun 'removeLast' bisa digunakan), mereka mendefinisikan pop () tetapi bukan push ().
sumber
Ok, pendapat pribadi di sini, tetapi Tambahkan dan Taruh menyiratkan posisi yang tepat dalam satu set.
Push dan Pop benar-benar konsep yang dapat diterapkan pada kedua ujung set ... Asalkan Anda konsisten ... Untuk beberapa alasan, bagi saya, Push () sepertinya harus diterapkan ke bagian depan perangkat set...
sumber
FYI, tidak terlalu sulit untuk membuat daftar yang memiliki metode push:
Tumpukan adalah tipe data yang agak abstrak. Gagasan "mendorong" dan "meletus" sebagian besar tidak tergantung pada bagaimana stack sebenarnya diimplementasikan. Misalnya, Anda secara teoritis dapat mengimplementasikan tumpukan seperti ini (walaupun saya tidak tahu mengapa Anda mau):
... dan saya belum menggunakan daftar tertaut untuk mengimplementasikan tumpukan.
sumber
Push adalah perilaku stack yang didefinisikan ; jika Anda mendorong A ke tumpukan (B, C, D) Anda akan mendapatkan (A, B, C, D).
Jika Anda menggunakan python append, dataset yang dihasilkan akan terlihat seperti (B, C, D, A)
Sunting: Wow, kesedihan suci.
Saya akan berasumsi bahwa akan menjadi jelas dari contoh saya bagian mana dari daftar yang paling atas, dan bagian mana yang paling bawah. Dengan asumsi bahwa sebagian besar dari kita di sini membaca dari kiri ke kanan, elemen pertama dari daftar mana pun selalu berada di sebelah kiri.
sumber
Mungkin karena versi asli Python ( C Python) ditulis dalam C, bukan C ++.
Gagasan bahwa daftar dibentuk dengan mendorong sesuatu ke belakang sesuatu mungkin tidak seterkenal pemikiran menambahkannya.
sumber
Push dan Pop masuk akal dalam hal metafora tumpukan piring atau nampan di kafetaria atau prasmanan, khususnya yang dalam jenis pemegang yang memiliki pegas di bawahnya sehingga pelat atas (kurang lebih ... dalam teori) di tempat yang sama tidak peduli berapa banyak piring di bawahnya.
Jika Anda mengeluarkan baki, berat pada pegas sedikit kurang dan tumpukan "sedikit" naik, jika Anda mengembalikan piring, itu "mendorong" tumpukan itu ke bawah. Jadi, jika Anda berpikir tentang daftar sebagai tumpukan dan elemen terakhir sebagai yang teratas, maka Anda tidak akan memiliki banyak kebingungan.
sumber