remove por listas español comprensión python

por - pop python



¿Por qué las listas de python tienen pop() pero no push() (10)

¿Porque le agrega un elemento a una lista? El empuje se usa generalmente cuando se refiere a pilas.

¿Alguien sabe por qué la función list.append de Python no se llama list.push dado que ya existe una list.pop que elimina y devuelve el último elemento (que indexó en -1) y la semántica list.append es compatible con ese uso?


No es una respuesta oficial de ninguna manera (solo una suposición basada en el uso del idioma), 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, adjuntar) en lugar de términos de pila (es decir, push). Dado que 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 ().


Ok, la opinión personal aquí, pero Agregar y Preponer implican posiciones precisas en un conjunto.

Push y Pop son realmente conceptos que se pueden aplicar a cualquiera de los extremos de un conjunto ... Solo mientras sea consistente ... Por alguna razón, para mí, Push () parece que debería aplicarse al frente de un conjunto...


Para su información, no es terriblemente difícil hacer una lista que tenga un método de inserción:

>>> 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]

Una pila es un tipo de datos algo abstracto. La idea de "empujar" y "hacer 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):

l = [1,2,3] l.insert(0, 1) l.pop(0)

... y no he empezado a usar listas vinculadas para implementar una pila.


Porque "anexar" significa intuitivamente "agregar al final de la lista". Si se llamara "push", no estaría claro si estamos agregando cosas en la cola o al principio de la lista.


Porque "append" existía mucho antes de que se pensara en "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 cómo agregar pop en 1997. Guido escribió:

Para implementar una pila, uno tendría que agregar una primitiva list.pop () (y no, no estoy en contra de este en particular sobre la base de ningún principio). list.push () podría agregarse para simetría con list.pop () pero no soy un gran fanático de los nombres múltiples para la misma operación; tarde o temprano, leerá un código que usa el otro, así que Necesitas aprender ambos, que es más carga cognitiva.

También puede ver que analiza 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 iconos:

Todavía creo que es mejor dejar todo esto fuera de la implementación del objeto de la lista: si necesitas una pila o una cola, con una semántica particular, escribe una pequeña clase que use una lista

En otras palabras, para las pilas implementadas directamente como listas de Python, que ya son compatibles con fast append () y del list [-1], tiene sentido que list.pop () funcione de forma predeterminada en el último elemento. Incluso si otros idiomas lo hacen de manera diferente.

Aquí está implícito que la mayoría de las personas deben adjuntar a una lista, pero muchas menos tienen la oportunidad de tratar las listas como pilas, por lo que list.append llegó mucho antes.


Porque se anexa; no empuja "Anexar" se agrega al final de una lista, "empujar" se agrega al frente.

Piense en una cola frente a una pila.

http://docs.python.org/tutorial/datastructures.html

Edición: para volver a redactar mi segunda oración de manera más precisa, "anexar" 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. Poner en una pila es poner algo "arriba", pero el lugar que ocupa en la estructura de datos subyacente depende completamente de la implementación. Por otro lado, empujar en una cola implica agregarla al final.


Probablemente porque la versión original de Python ( C Python) se escribió en C, no en C ++.

La idea de que una lista se forma al poner cosas en la parte posterior de algo probablemente no sea tan conocida como la idea de agregarlas.


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 la placa superior es (más o menos ... en teoría) en el mismo lugar no importa cuántos platos haya debajo.

Si quita una bandeja, el peso en el resorte es un poco menor y la pila se "levanta" un poco, si coloca la placa de nuevo, "empuja" la pila hacia abajo. Entonces, si piensas que la lista como una pila y el último elemento están en la parte superior, entonces no deberías tener mucha confusión.


Push es un comportamiento de stack definido; si presionaba A para apilar (B, C, D) obtendría (A, B, C, D).

Si usó el apéndice de Python, el conjunto de datos resultante se vería como (B, C, D, A)

Edit: 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 los que estamos aquí leemos de izquierda a derecha, el primer elemento de cualquier lista siempre estará a la izquierda.