2017-12-15 10 views
-1

Ich bin neu in PythonWie bekomme ich die Häufigkeit von Zahlen in einer Liste nach einer zweiten fortlaufenden Liste?

Ich fand Themen auf über Häufigkeit der Zahlen in einer Liste zählen. In meinem Problem möchte ich jedoch die Frequenz erhalten, die einer zweiten fortlaufenden Liste entspricht, so dass fehlenden Elementen Nullzählungen zugewiesen werden. Meine gesuchte Liste:

Earthquake_Magnitude = [ 3.5 4.4 3.4 3.6 3.2 3.3 3.7 3. 3.1 4.3 3.9 3.2 3.1 3.2 3.6 3.1 4. 3.5 4.4 3. 3. 3.6 4.2 3.7 3.1 3.4 3.1 3.6 3.4 3. 4.1 3.4 4.2 3.4 3.9 3. 3.9 3. 3. 3.5 3.2 3.1] 

Meine zweite Liste:

Magnitude_bins = [ 3. 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4. 4.1 4.2 4.3 4.4] 

Antwort

1

Import groupby sehen und Ihre Listen mit 2.9 als Beweis für die 0 hinzugefügt definieren als vordefinierte Ergebnisse alle in magnitude_bins sind.

from itertools import groupby 

# Predefined lists from the question with the addition of 2.9 for proof of 0 
earthquake_magnitude = [3.5, 4.4, 3.4, 3.6, 3.2, 3.3, 3.7, 3.0, 3.1, 4.3, 3.9, 
         3.2, 3.1, 3.2, 3.6, 3.1, 4.0, 3.5, 4.4, 3.0, 3.0, 3.6, 
         4.2, 3.7, 3.1, 3.4, 3.1, 3.6, 3.4, 3.0, 4.1, 3.4, 4.2, 
         3.4, 3.9, 3.0, 3.9, 3.0, 3.0, 3.5, 3.2, 3.1, 2.9] 
magnitude_bins = [3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1, 
        4.2, 4.3, 4.4] 

nun die Liste sortieren, so dass groupby seine Sache tun kann

earthquake_magnitude.sort() 

wir eine Liste von Strings Jetzt erstellen "Größe: count", wenn es in magnitude_bins ist sonst die Zählung machen = 0

output = [str(key) + ": " + str(len(list(group))) if key in magnitude_bins \ 
     else str(key) + ": " + str(0) \ 
     for key, group in groupby(earthquake_magnitude)] 

zeigen die Ausgabe

print(output) 
+0

Danke für alles. Das funktioniert gut. –

0

Ich glaube, Sie wäre am besten ein „Wörterbuch“ off zu schaffen, die von den Tasten auf Werte in Python eine Lookup-Tabelle ist. In diesem Fall ist Ihr "Schlüssel" (die Sache, die Sie in das Wörterbuch eingeben, um sie abzufragen) die Größe des Erdbebens und der "Wert" (was aus dem Wörterbuch bei einer Abfrage kommt) ist die Anzahl der Erdbeben von dieser Größenordnung. So

, können Sie versuchen:

from collections import defaultdict 

freq = defaultdict(int) 

for thisEvent in Earthquake_Magnitude: 
    freq[thisEvent] += 1 

for thisBin in Magnitude_bins: 
    print(str(thisBin) + " has frequency " + str(freq[thisBin])) 

Wo in diesem Fall ein defaultdict ein Wörterbuch, das einen Standardwert hat, um alle Ihre Ausgangsfrequenzen zu machen 0.

1

Lassen Sie uns definieren Ihre Listen:

>>> Earthquake_Magnitude = [3.5, 4.4, 3.4, 3.6, 3.2, 3.3, 3.7, 3., 3.1, 4.3, 3.9, 3.2, 3.1, 3.2, 3.6, 3.1, 4., 3.5, 4.4, 3., 3., 3.6, 4.2, 3.7, 3.1, 3.4, 3.1, 3.6, 3.4, 3., 4.1, 3.4, 4.2, 3.4, 3.9, 3., 3.9, 3., 3., 3.5, 3.2, 3.1] 
>>> Magnitude_bins = [3., 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4., 4.1, 4.2, 4.3, 4.4] 

Jetzt wollen wir keinen Eintrag eine Anzahl von Einträgen in Earthquake_Magnitude erhalten ignoriert in Magnitude_bins:

>>> from collections import Counter 
>>> c = Counter(x for x in Earthquake_Magnitude if x in set(Magnitude_bins)) 
>>> c 
Counter({3.0: 7, 3.1: 6, 3.4: 5, 3.2: 4, 3.6: 4, 3.9: 3, 3.5: 3, 4.4: 2, 4.2: 2, 3.7: 2, 3.3: 1, 4.1: 1, 4.3: 1, 4.0: 1}) 

Wie Sie 3.0 aufgetreten 7 mal in Earthquake_Magnitude

Verwandte Themen