Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

217
Views
¿Cómo mirar al frente de deque sin estallar?

Quiero verificar una condición en el frente de una cola antes de decidir si aparecer o no. ¿Cómo puedo lograr esto en python con collections.deque?

 list(my_deque)[0]

parece feo y pobre para el rendimiento.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

TL; DR: suponiendo que su deque se llame d , simplemente inspeccione d[0] , ya que el elemento "más a la izquierda" en un deque es el frente (es posible que desee probar antes de la longitud del deque para asegurarse de que no esté vacío). Tomando la sugerencia de @asongtoruin, use if d: para probar si el deque está vacío (es equivalente a if len(d) == 0: , pero más pitónico)

###¿Por qué no convertir a la lista? Porque los deque son indexables y estás probando el front . Si bien un deque tiene una interfaz similar a una lista, la implementación está optimizada para operaciones frontales y posteriores. Citando la documentación :

Los deques admiten adiciones y elementos emergentes seguros para subprocesos y eficientes en memoria desde cualquier lado del deque con aproximadamente el mismo rendimiento de O(1) en cualquier dirección.

Aunque los objetos de lista admiten operaciones similares, están optimizados para operaciones rápidas de longitud fija e incurren en costos de movimiento de memoria O(n) para operaciones pop(0) e inserción(0, v) que cambian tanto el tamaño como la posición de la representación de datos subyacente. .

La conversión a lista puede ser deseable si tiene muchas operaciones que acceden al "medio" de la cola. Nuevamente citando la documentación:

El acceso indexado es O(1) en ambos extremos pero se ralentiza a O(n) en el medio. Para un acceso aleatorio rápido, utilice listas en su lugar.

La conversión a list es O(n), pero cada acceso subsiguiente es O(1).

over 4 years ago · Santiago Trujillo Report

0

Simplemente puede encontrar el último elemento usando my_deque[-1] o my_deque[len(my_deque)-1] .

over 4 years ago · Santiago Trujillo Report

0

Aquí hay una implementación simple que me permitió verificar el frente de la cola antes de aparecer (usando while y q[0] ):

Aplique su propia condición contra q[0] , antes de q.popleft() , a continuación:

 testLst = [100,200,-100,400,340] q=deque(testLst) while q: print(q) print('{}{}'.format("length of queue: ", len(q))) print('{}{}'.format("head: ", q[0])) print() q.popleft()

salida :

 deque([100, 200, -100, 400, 340]) length of queue: 5 head: 100 deque([200, -100, 400, 340]) length of queue: 4 head: 200 deque([-100, 400, 340]) length of queue: 3 head: -100 deque([400, 340]) length of queue: 2 head: 400 deque([340]) length of queue: 1 head: 340
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!