Estaba trabajando con un deque y me preguntaba por qué el siguiente código funciona de la forma en que lo hace:

import collections

d = collections.deque()
d.append("a")
d.append("b")
d[-1] += d.pop()
print(d)

Salida: deque(['bb'])

Esto me sorprendió, ya que esperaba que el código diera como resultado deque(['ab']) en lugar de deque(['bb']). ¿Por qué ocurrió esto?

0
rsvarma 10 ago. 2020 a las 08:18

2 respuestas

La mejor respuesta

Esta línea

d[-1] += d.pop()

Es igual por esta línea

d[-1] = d[-1] + d.pop()

Python primero obtiene d[-1] y eso es 'b'

Después de eso, ejecute el método pop para dy este método devuelve 'b' al final, Python establece 'bb' para d[-1]

Si desea que aparezca el primer elemento, use la función popleft().

Código editado:

from collections import deque


d = deque()

d.append("a")
d.append("b")

d[-1] = d.popleft() + d[-1]

print(d)

Salida:

deque(['ab'])
1
apep 10 ago. 2020 a las 05:37

La respuesta es bastante simple:

  • d [-1] + = d.pop () se expande como: d [-1] = d [-1] + d.pop ()
  • d [-1] elige el más correcto, aquí es b.
  • d.pop () elimina la mayoría de la derecha en nuestro caso es "b" y agrega a d [-1] que también es b del paso anterior (hace que este "bb") y lo coloca en el d [-1] que es el lugar más a la derecha que ahora es "a" como d.pop () eliminó b con "bb".

Esto se puede explicar fácilmente si agrega uno más al frente:

import collections
d = collections.deque()
d.append('z')
d.append('a')
d.append('b')
print ("d -1 pos is : "+d[-1])
d[-1]+=d.pop()
print (d)

Salida: d -1 pos es: b deque (['z', 'bb'])

1
Karthik S 10 ago. 2020 a las 05:38