184 votes

Boucler sur une liste en Python

J'ai une liste contenant des sous-listes. Je veux imprimer toutes les sous-listes dont la longueur est égale à 3.

Je fais ce qui suit en python :

for x in values[:]:
    if len(x) == 3:
        print(x)

values est la liste originale. Le code ci-dessus imprime-t-il chaque sous-liste de longueur égale à 3 pour chaque valeur de x ? Je veux afficher les sous-listes où length == 3 une seule fois.

Le problème est résolu. Le problème vient de l'éditeur Eclipse. Je ne comprends pas la raison, mais il n'affiche que la moitié de ma liste lorsque je lance ma boucle.

Y a-t-il des paramètres que je dois modifier dans Eclipse ?

207voto

RanRag Points 9395

x in mylist est meilleur et plus lisible que x in mylist[:] et votre len(x) doit être égal à 3 .

>>> mylist = [[1,2,3],[4,5,6,7],[8,9,10]]
>>> for x in mylist:
...      if len(x)==3:
...        print x
...
[1, 2, 3]
[8, 9, 10]

ou si vous avez besoin de plus de python, utilisez Liste des compréhensions

>>> [x for x in mylist if len(x)==3]
[[1, 2, 3], [8, 9, 10]]
>>>

16voto

comex Points 229

Vous pouvez aussi bien utiliser for x in values plutôt que for x in values[:] ; ce dernier fait une copie inutile. De plus, bien sûr, ce code vérifie une longueur de 2 plutôt que de 3...

Le code n'imprime qu'un seul élément par valeur de x - et x itère sur les éléments de values qui sont les sous-listes. Ainsi, chaque sous-liste ne sera imprimée qu'une seule fois.

15voto

Kean Amaral Points 3217

Voici la solution que je cherchais. Si vous voulez créer une Liste2 qui contient la différence des éléments numériques de la Liste1.

list1 = [12, 15, 22, 54, 21, 68, 9, 73, 81, 34, 45]
list2 = []
for i in range(1, len(list1)):
  change = list1[i] - list1[i-1]
  list2.append(change)

Notez que si len(list1) est de 11 (éléments), len(list2) il n'y aura que 10 éléments car nous commençons notre boucle for à partir de l'élément avec l'index 1 dans la liste1 et non à partir de l'élément avec l'index 0 dans la liste1.

0voto

Aaditya Shah Points 71

Faites plutôt ça :

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X