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?

user1188821
quelle
1
Könnten Sie print valuesdie Ausgabe hier machen und zeigen? Bearbeiten: oder überprüfen Sie einfach, ob es nicht leer ist.
Brigand
1
Beste Antwort: stackoverflow.com/a/28072982/4561887
Gabriel Staples

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]]
>>>
RanRag
quelle
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.

Comex
quelle
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

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