Me encontré con este mismo problema ... maxlen = 5 de deque NO era una opción compatible debido a problemas de velocidad/fiabilidad de acceso.
solución simple:
l = []
l.append(x) # add 'x' to right side of list
l = l[-5:] # maxlen=5
Después de añadir, simplemente redefinir 'l' como los más recientes cinco elementos de 'L'.
print(l)
Llámalo Hecho.
Para sus propósitos, podría detenerse allí ... pero necesitaba un popleft(). Mientras que el pop() elimina un elemento de la derecha donde estaba anexa ... pop (0) elimina de la izquierda:
if len(l) == 5: # if the length of list 'l' has reached 5
right_in_left_out = l.pop(0) # l.popleft()
else: #
right_in_left_out = None # return 'None' if not fully populated
Sombrero de punta a James en Tradewave.net
No hay necesidad de funciones de clase o deque.
Más ... para anexar izquierda y derecha pop:
l = []
l.insert(0, x) # l.appendleft(x)
l = l[-5:] # maxlen=5
sería su equivalente appendleft() en caso de que desee cargar su lista frontal sin utilizar deque
Por último, si decide anexar desde la izquierda ...
if len(l) == 5: # if the length of list 'l' has reached 5
left_in_right_out = l.pop() # pop() from right side
else: #
left_in_right_out = None # return 'None' if not fully populated
+1, agradable - Estaba a punto de sugerir lista de subclases ala [gnibbler] (http://stackoverflow.com/questions/ 5944708/python-forcing-a-list-to-a-fixed-size/5944763 # 5944763) pero sospeché que podría haber una solución preconstruida. – senderle
¿Cómo implementa python la solución? ¿Deque aparece el elemento a la izquierda cuando se agrega un nuevo elemento? –
Python tiene una gran cantidad de estructuras de datos de listas que pueden convertirse en una lista cuando las necesite utilizando list(). Por ejemplo, haz una lista de dict y try (MyDict). –