¿Alguien sabe por qué list.append
no se llama a la función de Python list.push
dado que ya hay un list.pop
que elimina y devuelve el último elemento (que está indexado en -1) y la list.append
semántica es consistente con ese uso?
265
pop
puede sacar elementos de cualquier parte de una lista.append
no puede "empujar" algo en el medio de una lista.Respuestas:
Porque "agregar" existía mucho antes de que se pensara "pop". Python 0.9.1 admitió list.append a principios de 1991. En comparación, aquí hay parte de una discusión sobre comp.lang.python sobre agregar pop en 1997. Guido escribió:
También puede ver que él discute la idea de si push / pop / put / pull debería estar en el elemento [0] o después del elemento [-1] donde publica una referencia a la lista de Icon:
En otras palabras, para las pilas implementadas directamente como listas de Python, que ya admiten el apéndice rápido () y del list [-1], tiene sentido que list.pop () funcione de manera predeterminada en el último elemento. Incluso si otros idiomas lo hacen de manera diferente.
Implícito aquí es que la mayoría de la gente necesita agregar una lista, pero muchos menos tienen la oportunidad de tratar las listas como pilas, por lo que list.append llegó mucho antes.
fuente
you're going to *read* code that uses the other one (...) which is more cognitive load
Recordar "no hay empuje" solo introduce una carga cognitiva cuando escribes código. Recordar que "empujar es un sinónimo exacto de agregar" introduce una carga cognitiva cada vez que lees el que ves que se usa con menos frecuencia. Consulte stackoverflow.com/questions/3455488/… para obtener más información acerca de por qué la gente piensa que la legibilidad a menudo triunfa sobre la capacidad de escrituraPorque anexa; No empuja. "Agregar" se agrega al final de una lista, "presionar" se agrega al frente.
Piense en una cola frente a una pila.
http://docs.python.org/tutorial/datastructures.html
Editar: Para reformular mi segunda oración más exactamente, "Agregar" implica claramente agregar algo al final de una lista, independientemente de la implementación subyacente. Donde un nuevo elemento se agrega cuando se "empuja" es menos claro. Empujar sobre una pila es poner algo en la "parte superior", pero donde realmente va en la estructura de datos subyacente depende completamente de la implementación. Por otro lado, empujar a una cola implica agregarlo al final.
fuente
push
agrega al final.list.pop
semántica,list.append
inserta elementos en la lista, cuando se ve como una pila.¿Porque agrega un elemento a una lista? Push generalmente se usa cuando se refiere a las pilas.
fuente
Porque "agregar" intuitivamente significa "agregar al final de la lista". Si se llamara "push", entonces no estaría claro si estamos agregando cosas en la cola o al principio de la lista.
fuente
pop
operación. Dadopush
ypop
son típicamente operaciones de pila e ir juntos, es de esperar que operan en el mismo final de la lista.No es una respuesta oficial de ninguna manera (solo una suposición basada en el uso del lenguaje), pero Python le permite usar listas como pilas (por ejemplo, la sección 5.1.1 del tutorial ). Sin embargo, una lista sigue siendo, en primer lugar, una lista, por lo que las operaciones que son comunes a ambos usan términos de lista (es decir, agregar) en lugar de términos de pila (es decir, push). Como una operación pop no es tan común en las listas (aunque podría haberse usado 'removeLast'), definieron un pop () pero no un push ().
fuente
Ok, la opinión personal aquí, pero Añadir y Anteponer implica posiciones precisas en un conjunto.
Push y Pop son realmente conceptos que se pueden aplicar a cualquier extremo de un conjunto ... Siempre y cuando sea consistente ... Por alguna razón, para mí, Push () parece que debería aplicarse al frente de un conjunto...
fuente
Para su información, no es terriblemente difícil hacer una lista que tenga un método de inserción:
Una pila es un tipo de datos algo abstracto. La idea de "empujar" y "estallar" es en gran medida independiente de cómo se implementa realmente la pila. Por ejemplo, teóricamente podrías implementar una pila como esta (aunque no sé por qué lo harías):
... y no me he acostumbrado a usar listas vinculadas para implementar una pila.
fuente
Push es un comportamiento de pila definido ; si presionó A para apilar (B, C, D) obtendría (A, B, C, D).
Si usó python append, el conjunto de datos resultante se vería así (B, C, D, A)
Editar: Wow, santa pedantería.
Supongo que de mi ejemplo quedaría claro qué parte de la lista es la parte superior y qué parte es la parte inferior. Suponiendo que la mayoría de nosotros leemos de izquierda a derecha, el primer elemento de cualquier lista siempre estará a la izquierda.
fuente
Probablemente porque la versión original de Python ( C Python) fue escrita en C, no en C ++.
La idea de que se forme una lista empujando cosas hacia atrás de algo probablemente no sea tan conocida como la idea de agregarlas.
fuente
Push and Pop tiene sentido en términos de la metáfora de una pila de platos o bandejas en una cafetería o buffet, específicamente en el tipo de soporte que tiene un resorte debajo, por lo que el plato superior es (más o menos ... en teoría) en el mismo lugar sin importar cuántas placas hay debajo.
Si retira una bandeja, el peso sobre el resorte es un poco menor y la pila "sube" un poco, si vuelve a colocar el plato, "empuja" la pila hacia abajo. Entonces, si piensa que la lista es una pila y el último elemento está en la parte superior, entonces no debería tener mucha confusión.
fuente