2012-11-29 7 views
2

J'ai une matrice, par exempleComment implémenter un tampon circulaire en Python?

a=[12,2,4,67,8,9,23] 

et je voudrais un code qui ajoute une valeur dire 45 à et supprime la première valeur « 12 » donc, en substance, je veux faire

a = [2,4,67,8,9,23,45] 

Je veux travailler avec des matrices régulières non matricielles, donc je ne peux pas utiliser hstack ou vstack Comment faire cela en python? Toute aide serait appréciée, merci

+0

Ce n'est pas une fenêtre coulissante; c'est un tampon circulaire. –

+0

Oh désolé, merci pour l'info – user17151

Répondre

1

La façon la plus simple:

a = a[1:] + [45] 
+0

C'est génial. J'aurais dû y penser, je ne suis qu'un débutant en python. Merci beaucoup – user17151

+0

Pas de problème, mais la réponse de FogleBird est en fait plus efficace si la performance est une préoccupation du tout. – jaho

10

Utilisez un deque.

http://docs.python.org/2/library/collections.html#collections.deque

>>> import collections 
>>> d = collections.deque(maxlen=7) 
>>> d.extend([12,2,4,67,8,9,23]) 
>>> d.append(45) 
>>> print d 
deque([2, 4, 67, 8, 9, 23, 45], maxlen=7) 
+0

Merci, mais que signifie deque? Et merci pour la réponse, mais je pense que je vais aller avec les réponses de Marian, il est plus simple – user17151

+0

@ user17151 deque = file d'attente à double extrémité. Si vous avez 20 valeurs, peu importe ce que vous utilisez. Si vous avez 2 millions de valeurs, le deque est le qay aller plutôt qu'une simple liste. – glglgl

+0

@ user17151: c'est bien mais un deque est plus efficace car il n'aura pas à copier la structure de données entière chaque fois qu'un élément est ajouté. – FogleBird

0

Vous pouvez faire ceci:

a=[12,2,4,67,8,9,23] 
a.append(45) 
a.pop(0) 
Questions connexes