Sie können die neuen Listen in einem Wörterbuch speichern, indem Sie die Kategorienummer als Wörterbuchschlüssel verwenden. Wir verwenden ein Standarddict, um das Erstellen der Listen im Wörterbuch zu vereinfachen.
from collections import defaultdict
lst = [3.5, 1 ,7, 2, 4.5, 1, 6, 2, 4.8, 2, 3.1, 1, 9, 2]
# Separate data into different lists based on following number
d = defaultdict(list)
it = iter(lst)
for v, k in zip(it, it):
d[k].append(v)
# Display lists
for k in sorted(d.keys()):
print(k, d[k])
Ausgang
1 [3.5, 4.5, 3.1]
2 [7, 6, 4.8, 9]
Dieser Code meistert mit einer beliebigen Anzahl von Kategorien.
Wie Jean-François Fabre in den Kommentaren erwähnt, gibt es eine etwas effizientere Möglichkeit, das Drucken in sortierter Reihenfolge durchzuführen.
from collections import defaultdict
lst = [3.5, 1 ,7, 2, 4.5, 3, 6, 2, 4.8, 3, 3.1, 1, 9, 2]
# Separate data into different lists based on following number
d = defaultdict(list)
it = iter(lst)
for v, k in zip(it, it):
d[k].append(v)
# Display lists
for k, v in sorted(d.items()):
print(k, v)
Ausgang
1 [3.5, 3.1]
2 [7, 6, 9]
3 [4.5, 4.8]
Das Herz dieses Algorithmus ist
it = iter(lst)
for v, k in zip(it, it):
it = iter(lst)
ein Iterator-Objekt aus der Liste erstellt. Wir übergeben dann zwei Kopien dieses Iterators an zip
.
Schleifen über zip
ergibt Tupel, die die aufeinanderfolgenden Elemente von jedem der Argumente enthalten, die Sie füttern. Mit anderen Worten, wenn Sie zip(a, b, c)
bekommt man die ersten Elemente der einzelnen a
, b
, c
, dann erhalten Sie ihre zweiten Elemente usw.
Aber hier haben wir zip
zwei Verweise auf die it
Iterator übergeben. So, wenn zip
liest die nächsten Artikel von jedem der beiden it
s seine Arbeit wirklich seinen Weg durch die paarweise Elemente in lst
. So erhalten wir auf jeder Schleife der Schleife for
aufeinanderfolgende Paare von Elementen von lst
.
Bitte zeigen Sie Ihre Mühe :) Einfügen Ihres Codes wäre OK – 0Tech
Wie 0Tech sagte, zeigen Sie, was Sie bisher haben. Aber auch klar, sind diese Nummern 1 und 2 Positionen oder Flags. – sten
@Roxanne Ihre Bearbeitung hat den fett gedruckten Text in der "L" -Liste durcheinander gebracht. –