8

基本的に、リストが与えられた場合:

data = ["apple", "pear", "cherry", "apple", "pear", "apple", "banana"]

次のようなリストを返す関数を作成しようとしています:

["apple", "pear", "banana", "cherry"]

アルファベット順に並べることで関係を断ち切りながら、最初に最も頻繁に発生する単語で並べ替えられた戻りリストを作成しようとしています。また、重複を排除しようとしています。

各要素の数とデータ内の各要素のインデックスのリストを既に作成しました。

x = [n.count() for n in data]
z = [n.index() for n in data]

この時点からどこへ行くべきかわかりません。

4

3 に答える 3

3

使用できる頻度で要素を並べ替えるには、こちらcollections.most_commonのドキュメントを使用できます。たとえば、

from collections import Counter

data = ["apple", "pear", "cherry", "apple", "pear", "apple", "banana"]
print Counter(data).most_common()
#[('apple', 3), ('pear', 2), ('cherry', 1), ('banana', 1)]

@ゆうしさん、ありがとうございます。

from collections import Counter

data = ["apple", "pear", "cherry", "apple", "pear", "apple", "banana"]
x =[a for (a, b) in Counter(data).most_common()]

print x
#['apple', 'pear', 'cherry', 'banana']
于 2013-04-15T02:17:37.380 に答える
0

これは単純なアプローチですが、うまくいくはずです。

data = ["apple", "pear", "cherry", "apple", "pear", "apple", "banana"]

from collections import Counter
from collections import defaultdict

my_counter = Counter(data)

# creates a dictionary with keys
# being numbers of occurrences and
# values being lists with strings
# that occured a given time
my_dict = defaultdict(list)
for k,v in my_counter.iteritems():
    my_dict[v].append(k)

my_list = []

for k in sorted(my_dict, reverse=True):
    # This is the second tie-break, if both
    # strings showed up the same number of times
    # and correspond to the same key, we sort them
    # by the alphabetical order
    my_list.extend(sorted(my_dict.get(k))) 

結果:

>>> my_list
['apple', 'pear', 'banana', 'cherry']
于 2013-04-15T02:45:43.377 に答える