web-dev-qa-db-fra.com

Boucle sur une liste dans Python

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

Je fais ce qui suit en python:

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

values est la liste d'origine. Le code ci-dessus affiche-t-il toute la sous-liste avec une 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 affiche seulement la moitié de ma liste lorsque je lance ma boucle.

Dois-je modifier certains paramètres dans Eclipse?

161
user1188821

Essaye ça,

x in mylist est meilleur et plus lisible que x in mylist[:] et votre len(x) devrait ê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 d'utilisation de Pythonic list-comprehensions

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

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

Le code n'imprime qu'un é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.

14
comex

Voici la solution que je cherchais. Si vous souhaitez créer List2 qui contient la différence des éléments numériques dans List1.

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 bien que len(list1) soit 11 (éléments), len(list2) ne sera que 10 éléments car nous commençons notre boucle for à partir d'un élément d'indice 1 dans list1 et non d'un élément d'indice 0 dans list1.

10
Kean Amaral