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?

user1188821
la source
1
Pourriez-vous faire print valueset montrer la sortie ici? edit: ou vérifiez simplement qu'il n'est pas vide.
Brigand
1
Meilleure réponse: stackoverflow.com/a/28072982/4561887
Gabriel Staples

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]]
>>>
RanRag
la source
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.

comex
la source
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

Kean Amaral
la source
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)
Aaditya Shah
la source