[PageD'Accueil] [IndexDesTitres] [IndexDesTermes

Eliminer les doublons d'une liste

Comment éliminer les doublons d'une liste ? Très simple: en la convertissant temporairement en dictionnaire:

>>> maliste = [3,5,8,5,3,12]
>>> print dict([(i,0) for i in maliste]).keys()
[8, 3, 12, 5]
>>> 

Le détail:

>>> b = [(i,0) for i in maliste]
>>> print b
[(3, 0), (5, 0), (8, 0), (5, 0), (3, 0), (12, 0)]
>>> c = dict(b)
>>> print c
{8: 0, 3: 0, 12: 0, 5: 0}
>>> print c.keys()
[8, 3, 12, 5]
>>> 

Autre solution basée sur les Sets

>>> maliste = [3,5,8,5,3,12]
>>> print list(set(maliste))
[8, 3, 12, 5]

NB: la classe set est apparue avec le module Sets dans Python 2.3.x, elle est passée dans les builtins depuis Python 2.4.x

Arrangements des éléments d'une liste

Dans la pièce du bourgeois gentilhomme de Molière, alors que Monsieur Jourdain cherche en vain à déclarer sa flamme de la manière la plus galante, son mentor lui propose quelques variations sur le thème « Belle marquise, vos beaux yeux me font mourir d'amour. »

M. JOURDAIN -- Non, vous dis-je, je ne veux que ces seules paroles-là dans le billet, mais tournées à la mode, bien arrangées comme il faut. Je vous prie de me dire un peu, pour voir, les diverses manières dont on les peut mettre.

MAÎTRE DE PHILOSOPHIE -- On les peut mettre premièrement comme vous avez dit : « Belle marquise, vos beaux yeux me font mourir d'amour. » Ou bien : « D'amour mourir me font, belle marquise, vos beaux yeux. » Ou bien : « Vos yeux beaux d'amour me font, belle marquise, mourir. » Ou bien : « Mourir »

M. JOURDAIN -- Est-ce qu'il faut dire cela?

En fait, il cherchait à énumérer tous les arrangements des mots de la phrase, et ce petit script lui aurait bien servi.

   1 def arrangement(a):
   2     """
   3     Liste de tous les arrangements
   4     des éléments d'une liste
   5     """
   6     m=[]
   7     if len(a)==1: 
   8         m= [[a[0]]]
   9     else:
  10         m=[]
  11         for i in range(0,len(a)):
  12             ss=[]
  13             l= arrangement(a[0:i]+a[i+1:])
  14             for n in l:          
  15                 m=m+[[a[i]]+n]
  16     return m
  17 
  18 if __name__=="__main__":
  19     listedemots=["vos yeux","Marquise","me font",
  20     "mourir","d'amour"]
  21     a=arrangement(listedemots)
  22     print "Nombre de mots:%d Nombre d'arrangements:%d" % (len(listedemots),len(a))  
  23     for p in a:print " ".join(p)

Pile et queue (LIFO et FIFO)

Avec Python, il est extrêment facile de gérer des queues (FIFO, First In First Out (Premier entré premier sorti)) et des piles (LIFO, Last In First Out (Dernier entré premier sorti)).

Contrairement aux autres langages, pas besoin de bricoler une classe spéciale: il suffit d'utiliser directement un objet liste.

Pour une pile (LIFO), on empile avec append() et on dépile avec pop():

>>> a = [5,8,9]
>>> a.append(11)
>>> a
[5, 8, 9, 11]
>>> a.pop()
11
>>> a.pop()
9
>>> a
[5, 8]
>>> 

Pour une queue (FIFO), on place des éléments avec append() et on les sort avec pop(0):

>>> a = [5,8,9]
>>> a.append(11)
>>> a
[5, 8, 9, 11]
>>> a.pop(0)
5
>>> a.pop(0)
8
>>> a
[9, 11]
>>> 

Les listes pouvant contenir n'importe quel type d'objet, vous pouvez faire des piles ou des queues de n'importe quels objets !

NB: on peut aussi utiliser la classe deque (http://www.python.org/doc/2.5/lib/deque-objects.html) qui est plus rapide pour le pop(0)


2016-06-05 21:42