3

リストのリストがあります:

[['a','b','c'], ['a'], ['a','b']]

出力が次のようになるように、並べ替えて単一のリストを返したいと思います。

['a', 'b', 'c']

つまり、各要素が出現する回数によって並べ替えられます。a は 3 回、b は 2 回、c は 1 回出現します。

どうすればこれを行うことができますか?

4

6 に答える 6

7

collections.Counteritertools.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てください。これは非常に役立ちます。

于 2013-06-10T00:00:46.867 に答える
5

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']
于 2013-06-10T00:00:43.490 に答える
4

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')
于 2013-06-10T00:00:04.033 に答える
2

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']
于 2013-06-10T00:04:10.923 に答える
1

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']
于 2013-06-09T23:59:21.680 に答える
0
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
于 2013-06-10T00:04:23.497 に答える