Czy ktoś wie, dlaczego list.append
funkcja Pythona nie jest wywoływana, list.push
biorąc pod uwagę, że istnieje już element, list.pop
który usuwa i zwraca ostatni element (indeksowany jako -1), a list.append
semantyczny jest zgodny z tym zastosowaniem?
265
pop
może wyskakiwać z dowolnego miejsca na liście.append
nie można „wepchnąć” czegoś na środek listy.Odpowiedzi:
Ponieważ „append” istniało na długo przed myśleniem o „pop”. Lista obsługiwana przez Python 0.9.1. Dołącza na początku 1991 roku. Dla porównania, oto część dyskusji na temat comp.lang.python na temat dodawania popu w 1997 roku. Guido napisał:
Możesz także zobaczyć, jak omawia pomysł, czy push / pop / put / pull powinien znajdować się w elemencie [0] lub za elementem [-1], w którym zamieszcza odwołanie do listy ikon:
Innymi słowy, dla stosów zaimplementowanych bezpośrednio jako listy Python, które już obsługują szybkie append () i del list [-1], sensowne jest, aby list.pop () domyślnie działał na ostatnim elemencie. Nawet jeśli inne języki robią to inaczej.
Domniemane jest to, że większość ludzi musi dołączyć się do listy, ale o wiele mniej ma okazję traktować listy jako stosy, dlatego lista list.append pojawiła się znacznie wcześniej.
źródło
you're going to *read* code that uses the other one (...) which is more cognitive load
Pamiętaj, że „nie ma push” wprowadza ładunek poznawczy tylko podczas pisania kodu. Pamiętanie, że „push jest dokładnym synonimem append”, wprowadza ładunek poznawczy, ilekroć czytasz ten, którego używasz rzadziej. Zobacz stackoverflow.com/questions/3455488/…, aby dowiedzieć się więcej o tym, dlaczego ludzie myślą, że czytelność często przebija zdolność do zapisuPonieważ dołącza się; nie pcha. „Dołączanie” dodaje na końcu listy, „pchanie” dodaje na początku.
Pomyśl o kolejce kontra stosie.
http://docs.python.org/tutorial/datastructures.html
Edycja: Aby dokładnie przeredagować moje drugie zdanie, „Dołączanie” bardzo wyraźnie oznacza dodanie czegoś na końcu listy, niezależnie od podstawowej implementacji. To, gdzie nowy element zostanie dodany, gdy zostanie „wypchnięty”, jest mniej jasne. Wciśnięcie na stos oznacza umieszczenie czegoś na „górze”, ale to, gdzie faktycznie idzie w podstawowej strukturze danych, zależy całkowicie od implementacji. Z drugiej strony, wypychanie do kolejki oznacza dodawanie jej do końca.
źródło
push
dodaje do końca.list.pop
semantykę,list.append
wypycha elementy do listy, gdy jest postrzegane jako stos.Ponieważ dołącza element do listy? Push odnosi się zwykle do stosów.
źródło
Ponieważ „dołącz” intuicyjnie oznacza „dodaj na końcu listy”. Gdyby nazywało się to „push”, nie byłoby jasne, czy dodajemy rzeczy na końcu czy na początku listy.
źródło
pop
operacja. Ponieważpush
ipop
są zwykle operacjami stosowymi i idą w parze, należy oczekiwać, że działają one na tym samym końcu listy.Nie jest to oficjalna odpowiedź w żaden sposób (tylko zgadywanie oparte na użyciu języka), ale Python pozwala używać list jako stosów (np. Sekcja 5.1.1 samouczka ). Jednak lista wciąż jest przede wszystkim listą, więc operacje, które są wspólne dla obu, używają terminów listowych (tj. Dołączaj), a nie stosów (tj. Push). Ponieważ operacja pop nie jest tak powszechna na listach (chociaż można było użyć „removeLast”), zdefiniowano pop (), ale nie push ().
źródło
Ok, osobista opinia tutaj, ale Append and Prepend implikują precyzyjne pozycje w zestawie.
Push i Pop to tak naprawdę koncepcje, które można zastosować na każdym końcu zestawu ... Tak długo, jak jesteś konsekwentny ... Z jakiegoś powodu Push () wydaje się, że powinien mieć zastosowanie do przedniej części zestaw...
źródło
Do twojej wiadomości, nie jest strasznie trudne stworzenie listy, która ma metodę push:
Stos jest nieco abstrakcyjnym typem danych. Idea „wypychania” i „poppingu” jest w dużej mierze niezależna od tego, w jaki sposób stos jest faktycznie wdrażany. Na przykład możesz teoretycznie zaimplementować taki stos (chociaż nie wiem dlaczego):
... i nie wdałem się w używanie połączonych list do implementowania stosu.
źródło
Push jest zdefiniowanym zachowaniem stosu ; jeśli wepchniesz A na stos (B, C, D), dostaniesz (A, B, C, D).
Jeśli użyjesz Append Pythona, wynikowy zestaw danych będzie wyglądał następująco (B, C, D, A)
Edycja: Wow, święta pedanteria.
Zakładam, że z mojego przykładu jasno wynika, która część listy jest na górze, a która na dole. Zakładając, że większość z nas tutaj czyta od lewej do prawej, pierwszy element każdej listy zawsze będzie po lewej stronie.
źródło
Prawdopodobnie dlatego, że oryginalna wersja Pythona ( C Python) została napisana w C, a nie w C ++.
Pomysł, że lista jest tworzona przez wypychanie rzeczy na tył czegoś, prawdopodobnie nie jest tak dobrze znany, jak myśl o ich dodaniu.
źródło
Push i Pop mają sens pod względem metafory stosu talerzy lub tacek w stołówce lub bufecie, szczególnie tych w rodzaju uchwytu, który ma sprężynę pod spodem, więc górna płyta jest (mniej więcej ... teoretycznie) w tym samym miejscu, bez względu na to, ile talerzy jest pod nim.
Jeśli wyjmiesz tacę, ciężar sprężyny będzie nieco mniejszy, a stos nieco „wyskoczy”, a jeśli odłożysz płytkę, „popchnie” stos w dół. Więc jeśli myślisz o liście jako o stosie, a ostatni element o tym, że jest na górze, nie powinieneś mieć większego zamieszania.
źródło