0

曜日が順序付けられたリストにあるとしましょう:

    days_week=['mon','tues','wed','thurs','fri','sat']

私が作成している関数は、ランダムに発生する要素のリストを受け取りますdays_week:

    random_list=['mon','mon','mon','wed','sat','fri','fri','wed']

そして、最高の発生日のタプルと各日の発生のリストを正しい順序で出力する必要がありますdays_week

    output:('mon',[3,0,2,0,2,1])

私が最初に考えたのは、週の名前であるキーと、その日の出現を表す値の辞書を作成することでした。

    days_dictionary={}
    for i in random_list:
          if i in days_dictionary:
               days_dictionary[i]+=1
          else:
               days_dictionary[i]=1

辞書を使用して上記の出力を形成する方法がわからないため、ここで行き詰まっています。

編集:数学以外はインポートできません

4

4 に答える 4

3

これらの 2 つの式を days_dictionary で使用できるはずです

>>> max(days_dictionary, key=days_dictionary.get)
'mon'
>>> [days_dictionary.get(k, 0) for k in days_week]
[3, 0, 2, 0, 2, 1]

別の方法は、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])
于 2012-11-28T04:28:14.773 に答える
2

itertools.groupbyをご覧になることをお勧めします:

>>> 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')]
于 2012-11-28T04:33:49.740 に答える
1

まず、collections.Counterを使用して辞書を作成できます。

from collections import Counter
random_list = ['mon','mon','mon','wed','sat','fri','fri','wed']
counts = Counter(random_list)

次に、次のように頻度リストを作成できます。

days_week = ['mon','tues','wed','thurs','fri','sat']
freqs = [counts[d] for d in days_week if d in counts]

そして最終的な出力のために:

output = counts.most_common(1)[0][0], freqs ## ('mon', [3, 2, 2, 1])
于 2012-11-28T04:31:19.507 に答える
0

最初のステップは、次のように最も一般的な日を取得することです。

import operator
most_common = max(days_dictionary.iteritems(), key=operator.itemgetter(1))[0]

次に、残りの出現のリストを作成します

occur = [days_dictionary[day] for day in days_week]

次にタプルを作ります

(most_common, occur)
于 2012-11-28T04:32:37.707 に答える