1

単一の数値を持つエントリのネストされたリストがあり、どの値が合計で出現率が高いかを判断する必要があります。

[['3', '7', '13', '4'],
 ['7', '3', '2', '1', '13', '4'],
 ['3', '13'],
 ['3', '7', '4', '13'],
 ['7', '3', '13', '4'],
 ['3', '13', '7', '8', '4'],
 ['1', '7', '3', '4', '13'],
 ['13'],
 ['7', '3', '13'],
 ['7', '3', '4']]

この例では、数字「13」が 90% のエントリに表示されます。

カウンターを使用して最後に結果を比較することで、各エントリを反復処理できることはわかっていますが、これを行うためのよりクリーンな方法があるはずです。

何か助けてください。

前もって感謝します。

4

2 に答える 2

6

どうですか:

items = [['3', '7', '13', '4'],
 ['7', '3', '2', '1', '13', '4'],
 ['3', '13'],
 ['3', '7', '4', '13'],
 ['7', '3', '13', '4'],
 ['3', '13', '7', '8', '4'],
 ['1', '7', '3', '4', '13'],
 ['13'],
 ['7', '3', '13'],
 ['7', '3', '4']]

from collections import Counter
from itertools import chain
print Counter(chain.from_iterable(items)).most_common(1)[0]
# 13, 9
于 2013-10-03T13:43:24.487 に答える
3

リストを平坦化し、数値を数えます (サブリストで数値の繰り返しを許可しないようにしてください。それ以外の場合は、最初にそれらをセットに変換してください)。

>>> c = collections.Counter(item for sublist in data for item in sublist)
>>> c
Counter({'13': 9, '3': 9, '7': 8, '4': 7, '1': 2, '8': 1, '2': 1})
>>> c.most_common(1)[0]
('13', 9)

9 をデータのサイズで割ります (10) = 0,9 = 90%

また、それ3も有効な一致になることに注意してください。

于 2013-10-03T13:43:16.230 に答える