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.