Nehmen wir an, die Wochentage stehen in einer geordneten Liste:
days_week=['mon','tues','wed','thurs','fri','sat']
Die Funktion, die ich mache, erhält eine Liste zufällig vorkommender Elemente in days_week
:
random_list=['mon','mon','mon','wed','sat','fri','fri','wed']
Und dann sollte es ein Tupel des am höchsten vorkommenden Tages und eine Liste der Vorkommen jedes Tages in der richtigen Reihenfolge wie in days_week
ausgeben, z. Alle Mon's zuerst, dann alle Di's:
output:('mon',[3,0,2,0,2,1])
Mein erster Gedanke war, ein Wörterbuch mit Schlüsseln zu erstellen, die die Namen der Woche sind, und Werte, die die Vorkommen dieser Tage sind:
days_dictionary={}
for i in random_list:
if i in days_dictionary:
days_dictionary[i]+=1
else:
days_dictionary[i]=1
Und da stecke ich fest, weil ich nicht sicher bin, wie ich das Wörterbuch verwenden würde, um die Ausgabe oben zu bilden.
Bearbeiten: Ich kann nichts anderes als Mathe importieren
4 Antworten
Sie sollten in der Lage sein, diese beiden Ausdrücke mit Ihrem days_dictionary zu verwenden
>>> max(days_dictionary, key=days_dictionary.get)
'mon'
>>> [days_dictionary.get(k, 0) for k in days_week]
[3, 0, 2, 0, 2, 1]
Eine andere Möglichkeit ist die Verwendung eines collections.Counter
>>> import random
>>> from collections import Counter
>>> days_week = ['mon', 'tues', 'wed', 'thurs', 'fri', 'sat']
>>> random_list = [random.choice(days_week) for x in range(10)]
>>> random_list
['wed', 'mon', 'mon', 'tues', 'tues', 'mon', 'wed', 'mon', 'wed', 'sat']
>>> c = Counter(random_list)
>>> c.most_common(1)[0][0]
'mon'
>>> [c.get(k, 0) for k in days_week]
[4, 2, 3, 0, 0, 1]
>>> c.most_common(1)[0][0], [c.get(k, 0) for k in days_week]
('mon', [4, 2, 3, 0, 0, 1])
Der erste Schritt besteht darin, den häufigsten Tag wie folgt zu ermitteln:
import operator
most_common = max(days_dictionary.iteritems(), key=operator.itemgetter(1))[0]
Erstellen Sie dann die Liste der übrigen Vorkommen
occur = [days_dictionary[day] for day in days_week]
Dann mach das Tupel
(most_common, occur)
Ich schlage vor, einen Blick auf itertools.groupby zu werfen:
>>> days_week=['mon','tues','wed','thurs','fri','sat']
>>> import random
>>> random_list = [random.choice(days_week) for _ in range(10)]
>>> print random_list
['mon', 'fri', 'sat', 'wed', 'sat', 'thurs', 'wed', 'sat', 'tues', 'tues']
>>> import itertools
>>> g = itertools.groupby(sorted(enumerate(random_list), key=lambda x: x[1]), lambda x: x[1])
>>> for day, occur in g:
print day, list(occur)
fri [(1, 'fri')]
mon [(0, 'mon')]
sat [(2, 'sat'), (4, 'sat'), (7, 'sat')]
thurs [(5, 'thurs')]
tues [(8, 'tues'), (9, 'tues')]
wed [(3, 'wed'), (6, 'wed')]
Erstens: Sie können collection.Counter verwenden, um Ihr Wörterbuch zu erstellen:
from collections import Counter
random_list = ['mon','mon','mon','wed','sat','fri','fri','wed']
counts = Counter(random_list)
Dann können Sie die Frequenzliste folgendermaßen erstellen:
days_week = ['mon','tues','wed','thurs','fri','sat']
freqs = [counts[d] for d in days_week if d in counts]
Und für die endgültige Ausgabe:
output = counts.most_common(1)[0][0], freqs ## ('mon', [3, 2, 2, 1])
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.