Durchlaufen einer Liste in Python


177

Ich habe eine Liste mit Unterlisten. Ich möchte alle Unterlisten mit einer Länge von 3 drucken.

Ich mache folgendes in Python:

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

valuesist die ursprüngliche Liste. Druckt der obige Code jede Unterliste mit einer Länge von 3 für jeden Wert von x? Ich möchte die Unterlisten length == 3nur einmal anzeigen .

Das Problem ist behoben. Das Problem ist mit dem Eclipse-Editor. Ich verstehe den Grund nicht, aber es wird nur die Hälfte meiner Liste angezeigt, wenn ich meine Schleife ausführe.

Gibt es Einstellungen, die ich in Eclipse ändern muss?


1
Könnten Sie print valuesdie Ausgabe hier machen und zeigen? Bearbeiten: oder überprüfen Sie einfach, ob es nicht leer ist.
Brigand

Antworten:


196

Versuche dies,

x in mylistist besser und lesbarer als x in mylist[:]und du len(x)solltest gleich sein 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]

oder wenn Sie mehr Python benötigen, verwenden Sie Listenverständnisse

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

15

Sie können genauso gut verwenden, for x in valuesanstatt for x in values[:]; Letzterer macht eine unnötige Kopie. Natürlich prüft dieser Code auch auf eine Länge von 2 anstatt von 3 ...

Der Code druckt nur ein Element pro Wert von x- und xiteriert über die Elemente von values, die die Unterlisten sind. Daher wird jede Unterliste nur einmal gedruckt.


4
values ​​[:] schneidet alle Elemente von Werten aus, richtig? Ich gehe davon aus, dass Sie die temporäre Liste gemeint haben, die aus dem Schneiden erstellt wurde. Ich will nur sicher gehen.
Batbrat

1
Vielen Dank, dass Sie die unerwünschte Kopie erwähnt haben. @batbrat es schneidet nicht heraus, es schneidet ab, was ich meine ist, dass die Werte dupliziert werden und immer noch drin sind values.
AsTeR

Danke fürs klarstellen.
Batbrat

14

Hier ist die Lösung, nach der ich gesucht habe. Wenn Sie List2 erstellen möchten, das die Differenz der Zahlenelemente in List1 enthält.

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)

Beachten Sie, dass while len(list1)(Elemente) len(list2)nur 10 Elemente sind, da wir unsere for-Schleife von Element mit Index 1 in Liste1 und nicht von Element mit Index 0 in Liste1 starten


Dies war genau das, was ich brauchte, da ich mit Index 1 beginnen musste, nicht mit 0. +1
Timv

1

Tun Sie dies stattdessen:

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.