リストのリストがあります:
[['a','b','c'], ['a'], ['a','b']]
出力が次のようになるように、並べ替えて単一のリストを返したいと思います。
['a', 'b', 'c']
つまり、各要素が出現する回数によって並べ替えられます。a は 3 回、b は 2 回、c は 1 回出現します。
どうすればこれを行うことができますか?
collections.Counter
、itertools.chain.from_iterable
、およびリスト内包表記を使用します。
from itertools import chain
from collections import Counter
data = [['a', 'b', 'c'], ['a'], ['a', 'b']]
d = Counter(chain.from_iterable(data))
print([i for i, c in d.most_common()])
出力:
['a', 'b', 'c']
注: リスト内のいくつかの項目の頻度を数えたい場合は、忘れずに を使用しCounter
てください。これは非常に役立ちます。
itertools.chain.from_iterable()
最初にリストをフラット化し、次にcollections.Counter()
要素をカウントするために使用します。
>>> from collections import Counter
>>> from itertools import chain
>>> [x[0] for x in Counter(chain.from_iterable(mylist)).most_common())
['a', 'b', 'c']
collections.Counter
それをする必要があります:
>>> from collections import Counter
>>> lol = [['a','b','c'], ['a'], ['a','b']]
>>> c = Counter(elem for sublist in lol for elem in sublist)
>>> c
Counter({'a': 3, 'b': 2, 'c': 1})
elem for sublist..
ビットは単純にフラット化するイディオムです。あなたが使用することができます
>>> Counter(chain.from_iterable(lol))
Counter({'a': 3, 'b': 2, 'c': 1})
代わりに、 の後from itertools import chain
。次に、最も一般的なものを取得できます。
>>> c.most_common()
[('a', 3), ('b', 2), ('c', 1)]
次に、好きなようにキーを抽出します。
>>> [x[0] for x in c.most_common()]
['a', 'b', 'c']
>>> zip(*c.most_common())[0]
('a', 'b', 'c')
This works:
LoL= [['a','b','c'], ['a'], ['a','b']]
d={}
for e in [i for sub in LoL for i in sub]:
d[e]=d.setdefault(e,0)+1
print sorted(d, key=d.get, reverse=True)
Prints:
['a', 'b', 'c']
collections.Counter
各サブリスト内の各要素のカウンターを保持するために使用できます。このようなもの、
>>> from collections import Counter
>>> lst = [['a','b','c'], ['a'], ['a','b']]
>>> counts = Counter()
>>> for sublst in lst:
... for ele in sublst:
... counts[ele] += 1
...
>>> [ele for ele, _ in counts.most_common()]
['a', 'b', 'c']
from collections import Counter
import operator
mlist= [['a','b','c'], ['a'], ['a','b']]
elist= [x for x,y in sorted(
Counter([l for s in mlist for l in s]).iteritems(),
key=operator.itemgetter(1),reverse=True)]
print elist