FAQ PythonConsultez toutes les FAQ

Nombre d'auteurs : 15, nombre de questions : 269, dernière mise à jour : 10 septembre 2014  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions posées sur le forum Python complétées par d'autres questions qui pouvaient nous sembler intéressantes de traiter. Toutefois il se peut que les réponses apportées contiennent des erreurs, imprécisions ... Vous pouvez dans ce cas contacter un des membres de la rédaction pour lui faire part de vos remarques.

L'équipe Python de Developpez.


SommaireType de donnéesListes (7)
précédent sommaire suivant
 

Les listes sont des objets qui possèdent quelques méthodes très pratiques pour les manipuler:
l.append(x) : ajoute l'occurence x en fin de liste.
l.extend(x) : ajoute chaque élement de la séquence x en fin de liste.
l.count(x) : renvoie le nombre d'occurences x de la liste.
l.index(x[, i[, j]]) : retourne le plus petit k tel que s[k] = x et i<=k<=j. retourne une erreur si l'élément n'est pas présent dans la liste. Si i et j sont omis, l'ensemble de la liste est considéré.
l.insert(i, x) : insère l'occurence x à la position i.
[I]l.pop() : retourne l'élément de la position i et le supprime de la liste. Si i est omis, le dernier élément de la liste est retourné et supprimé
l.remove(x) : supprime la première occurence de x de la liste. retourne une erreur si cette valeur n'est pas présente.
l.reverse() : renverse la liste sur place.
l.sort([cmp[, key[, reverse]]]) : trie les éléments de la liste sur place. Vous pouvez définir votre propre fonction de comparaison en définissant le paramètre cmp. Le booléan reverse permet de retourner ou non la liste triée dans l'ordre croissant ou décroissant. Si ces paramètres sont omis, la liste est triée dans l'ordre alphanumérique croissant.

Code python :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> a = [5, 0, 3, 9, 4, 3, 7] 
>>> a.append(15) ## a = [5, 0, 3, 9, 4, 3, 7, 15] 
>>> a.extend((45, 12, 35)) ## a = [5, 0, 3, 9, 4, 3, 7, 15, 45, 12, 35] 
>>> a.extend('abcdef') ## a = [5, 0, 3, 9, 4, 3, 7 ,15, 45, 12 ,35, 'a', 'b', 'c', 'd', 'e', 'f'] 
>>> a.count(3) 
2 
>>> a.index(3) 
2 
>>> a.insert(8, 6) ## a = [5, 0, 3, 9, 4, 3, 7 ,15, 6, 45, 12 ,35, 'a', 'b', 'c', 'd', 'e', 'f'] 
>>> a.pop() ## a = [5, 0, 3, 9, 4, 3, 7 ,15, 6, 45, 12 ,35, 'a', 'b', 'c', 'd', 'e'] 
'f' 
>>> a.remove(3) ## a = [5, 0, 9, 4, 3, 7 ,15, 6, 45, 12 ,35, 'a', 'b', 'c', 'd', 'e'] 
>>> a.reverse() ## a = ['e', 'd', 'c', 'b', 'a', 35, 12, 6, 45, 7, 3, 4, 9, 0, 5] 
>>> a.sort() ## a = [0, 3, 4, 5, 6, 7, 9, 12, 35, 45, 'a', 'b', 'c', 'd', 'e']

Mis à jour le 13 mai 2006 Guigui_

Vous avez plusieurs manières de supprimer une occurence dans une liste
La première façon est d'utiliser la méthode l.remove(x) qui supprime la première occurence x dans la liste l et qui retourne une erreur si l'occurence x n'existe pas dans l.

Code python :
1
2
3
4
5
l = [1,5,4,1,23,1,2,1] 
try: 
    while True: l.remove(1) 
except: pass 
print l  ## [5,4,23,2]
Si vous voulez supprimer toutes les occurences d'une valeur dans une liste, ne passer pas par la méthode remove qui est lente mais reconstruisez plutôt entièrement votre liste en omettant les éléments qui ne vous intéressent plus. Cela se fait très facilement avec une liste en intension.

Code python :
1
2
3
l = 5 * range(4)  ##  [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3] 
l = [x for x in l if x!=0] 
print l  ##  [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
Pour ne conserver qu'une seule occurence pour chaque élement de la liste, utilisez le type set qui représente les objets ensembles et qui conserve donc une unique occurence de chaque élément d'une séquence.

Code python :
1
2
3
4
l = [1,5,4,1,23,1,2,1] 
s = set(l) 
l = list(s) 
print l ## [1,2,4,5,23]

Mis à jour le 27 avril 2006 Guigui_

Si votre liste ne contient que des string, il suffira d'utiliser la méthode ''.join(l)l représente une séquence.
Si votre liste contient autre chose que des string, vous pouvez utilisez toujours cette méthode join tout en traitant chaque élément de la séquence
exemple:

Code python :
1
2
3
4
5
l1 = ['toto',' ','part',' ','en',' ','voyage'] 
strl1 = ''.join(l1) 
l2 = [116, 111, 116, 111, 32, 112, 97, 114, 116, 32, 101, 110, 32, 118, 111, 121, 97, 
 103, 101] 
str2 = ''.join(chr(i) for i in l2)

Mis à jour le 27 avril 2006 Guigui_

Le module random propose la fonction random.shuffle( x[, random]) qui permet de mélanger une séquence en place.

Code python :
1
2
3
>>> import random 
>>> l = range(100) 
>>> random.shuffle(l)
Niveau algorithmique, voici une méthode pour mélanger une liste d'une complexité linéaire (par rapport au nombre d'éléments de la liste). On va simplement parcourir tous les élements de la liste et à chaque fois en choisir un autre au hasard et faire l'échange des 2 éléments. Cette méthode sera de toute façon beaucoup plus longue que l'utilisation de la fonction précédente.

Code python :
1
2
3
4
5
6
7
8
import random 
l = range(1000) 
count = len(l) 
randint = random.randint 
for i in range(count): 
    j = randint(0,count-1) ## Selection au hasard de l'index d'un element de la liste 
    ## Echange des 2 elements 
    l[i], l[j] = l[j], l[i]

Mis à jour le 27 avril 2006 Choupi Guigui_

L'objet list ne possède pas de méthode pour vider complètement ses éléments.
Si vous affecter la liste vide à votre liste ( mylist = [] ), vous créer en faite un nouvel objet, ce qui peut poser problème si d'autres références pointent sur ce même objet et que cette particularité est importante dans votre programme. La méthode la plus simple si vous souhaitez toujour travailler sur la même liste est d'utiliser directement la fonction comme suit:

Code python :
del(mylist[:])
une autre méthode beaucoup moins rapide est d'utiliser la méthode pop dans une boucle while

Code python :
while mylist: mylist.pop()

Mis à jour le 1er décembre 2008 Guigui_

Supposons que nous voulions créer un tableau d'entiers de 5 cases par 5. La méthode intuitive serait la suivante:

Code python :
1
2
3
4
>>> l = 5 * [5*[0]] 
>>> l[0][0] = 1 
>>> print l 
[[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]
Cependant en tenant de modifier un élément de la liste, on s'aperçoit que l'affectation s'est faite à plusieurs endroits. Ceci vient simplement du fait que lors de la création de notre liste de listes, la sous-liste 5*[0] n'a en fait été créée qu'une seule fois et que chaque sous-liste [I]l (0<=i<=4) pointe ainsi sur la même zone mémoire.
Pour créer une liste de listes (contenant des éléments initialisés), il vous faudra donc passer par 2 étapes:

Code python :
1
2
3
4
5
6
>>> l = 5*[0]  ## peu importe ce que l'on met dans cette liste 
>>> for i in range(len(l)):	l[i] = 5*[0] 
  
>>> l[0][0]=1 
>>> print l 
[[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
Il est à noter que cette méthode ne fonctionne qu'avec des types ou objets immuables (nombres ou chaînes de caractères) mais pas avec des objets.

Mis à jour le 30 avril 2006 Guigui_

Dans python les opérations avec des listes se font avec la référence
si vous faites une copie normale voici ce que vous obtenez :

Code :
1
2
3
4
5
6
7
>>>> a = [0,1,2,3,4] 
>>>> b = a 
>>>> b.append(5); 
>>>> print b 
[0,1,2,3,4,5] 
>>>> print a 
[0,1,2,3,4,5]
Vous voyez bien appeler a ou b renvois la même chose
pour éviter la copie par référence vous devez utiliser [:] derrière la liste à copier
voici le résultat :
Code :
1
2
3
4
5
6
7
>>>> a = [0,1,2,3,4] 
>>>> b = a[:] 
>>>> b.append(5); 
>>>> print b 
[0,1,2,3,4,5] 
>>>> print a 
[0,1,2,3,4]

Mis à jour le 5 septembre 2014 TiranusKBX

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2014 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
 
 
 
Partenaires

PlanetHoster
Ikoula