これは非常にシンプルなソリューション、おそらくない最も効率的な1が、シンプルなものです(?)。
data = get_data()
freqs, numbers = {}, {}
for i in data:
freqs[i] = freqs.get(i, 0) + 1
for n, c in freqs.items():
numbers[c] = numbers.get(c, []) + [n]
counts = list(numbers.keys())
res = (numbers[min(counts)], numbers[max(counts)])
、
In [1]: data = [13,12,11,13,14,13,7,11,13,14,12,14,14]
我々は2つの辞書を使用しようとしている、のは あなたが与えた例のデータから始めましょう、我々は上記のスクリプトを持っているものを詳細に見てみましょう
In [2]: freqs, numbers = {}, {}
最初の数字はdata
に反復され、 の個々の数字はdata
であり、値はt彼データにおける各 数の周波数(freqs.get(…)
ためfotnote参照)
In [3]: for i in data: freqs[i] = freqs.get(i, 0) + 1
第一方は、単に最初のものの反転であるキーが所定の と周波数と番号のリストである値であります周波数。私たちはすなわち、numbers
のキーを使用して、リストを必要とする。この時点で
In [4]: for n, c in freqs.items(): numbers[c] = numbers.get(c, []) + [n]
In [5]: numbers
Out[5]: {1: [7], 2: [12, 11], 4: [13, 14]}
我々は 出現
In [7]: [numbers[min(counts)], numbers[max(counts)]]
Out[7]: [[7], [13, 14]]
の最小値と最大値に興味があるので、 は
In [6]: counts = list(numbers.keys())
をオカレンス
脚注:.get(key, default_value)
辞書のメソッド は、キーが辞書に存在しない場合にデフォルト値を返します。この機能をデフォルト値0
で使用して、個々の数字の を合計し、[]
のvoidリストを合計して与えられた頻度のすべての数字のリスト
「max occure element」(別名_mode_)については、この質問をご覧ください:[リストのモードを探す](https://stackoverflow.com/questions/10797819/finding-the-mode-of -リスト)。 –
[リストのモードを見つける](https://stackoverflow.com/questions/10797819/finding-the-mode-of-a-list) – araknoid