Faire une boucle sur une liste en Python


177

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

Je fais ce qui suit en python:

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

valuesest la liste originale. Le code ci-dessus imprime-t-il chaque sous-liste d'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 n'affiche que la moitié de ma liste lorsque je lance ma boucle.

Dois-je modifier certains paramètres dans Eclipse?


1
Pourriez-vous faire print valueset montrer la sortie ici? edit: ou vérifiez simplement qu'il n'est pas vide.
Brigand

Réponses:


196

Essaye ça,

x in mylistest 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 de compréhension pythonique, utilisez des listes de compréhension

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

15

Vous pouvez aussi bien utiliser for x in valuesplutô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 imprime seulement un élément par valeur de x- et xitère sur les éléments de values, qui sont les sous-listes. Il n'imprimera donc chaque sous-liste qu'une seule fois.


4
values ​​[:] tranche tous les éléments des valeurs, non? Je suppose que vous vouliez dire la liste temporaire créée à partir du découpage. Juste pour être sûr.
batbrat le

1
Merci d'avoir mentionné la copie indésirable. @batbrat, il ne tranche pas, il tranche, ce que je veux dire, c'est que les valeurs sont dupliquées et toujours présentes values.
AsTeR

Merci de clarifier.
batbrat

14

Voici la solution que je recherchais. 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 while len(list1)vaut 11 (éléments), len(list2)ne sera que 10 éléments car nous démarrons notre boucle for à partir de l'élément avec l'index 1 dans la liste1 et non depuis l'élément avec l'index 0 dans la liste1


C'était exactement ce dont j'avais besoin car j'avais besoin de commencer à partir de l'index 1 et non de 0. +1
timv

1

Faites ceci à la place:

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.