2016-06-03 5 views
0

Ich habe eine Liste von 1000 Zufallszahlen im Intervall [1, 12] und ich suche nach einer Möglichkeit, sie in anderen Listen so zu trennen, dass ich neu bekomme Listen nur mit 1, andere mit nur 2, und so weiter.Einzelteile von einer Liste von Zufallszahlen in einer neuen Liste trennen

Mein Python-Code um die Liste zu erzeugen ist:

A=[] 
for x in range(1,1001): 
    A.append(random.randint(2, 12)) 
print A 
+0

Sie können jede Anzahl von Intervallen zählen und eine neue Liste erstellen. Aber warum willst du das umsetzen? – ashish

+4

Was genau ist der * Punkt * Ihres Codes? Was versuchst du damit zu erreichen? Wäre eine Zählung der Anzahl der Erscheinungen jeder Zahl ausreichend? Warum sollten Sie sie alle zunächst in einer einzigen Liste zusammenfassen, wenn Sie das nicht brauchen? – jonrsharpe

Antwort

1

ein Wörterbuch erstellen mit Schlüssel für jedes einzelne Element Ihrer Liste A. Erstellen Sie dann eine Liste für jeden Schlüssel.

f={} 
for i in set(A): 
    f[i]=[i]*A.count(i) 

Auf diese Weise sagen A 82 Elemente der 2. A.count (2) 82. Sie möchten eine Liste von [2, ..., 2], deren Länge = hat, ist 82. Sie können schreibe [2] * 82, um eine solche Liste zu erhalten.

Der Iterator tut dies für die Nummer jedes Elements in A.

1

Verwenden groupby auf sorted Liste und dict Verständnis Ihr Ergebnis Wörterbuch bauen:

from itertools import groupby 

result = {i: list(g) for i, g in groupby(sorted(A))} 

print result 
# {1: [1, 1, 1], 2: [2, 2, 2, 2], 3: [3, 3]...} 

oder eine Liste von Listen (@ColonelBeauvel) zu haben, benutzen Sie einfach eine Liste Verständnis:

result = [list(g) for i, g in groupby(sorted(A))] 
+0

List Verständnis ist noch netter: '[Liste (g) für i, g in groupby (sortiert (A))]' –

+0

Hat dies früher (nicht mit Verständnis obwohl) aber ich dachte, der Diktat-Ansatz entspricht OP's Frage. Hinzufügen. Vielen Dank. –

+1

Wenn ein Wörterbuch benötigt wird, können Sie das Wörterbuchverständnis in einem einzigen Liner mit Ihrem Code machen. –

Verwandte Themen