2011-01-06 12 views
2

を保存するには、大丈夫Pythonのリスト - 最も人気のある色

red,blue,yellow,green 

がありますされて、私は最も人気のある色は、それは私が欲しいものリスト

popular.append("red") 
popular.append("blue") 
popular.append("green") 
popular.append("red") 
popular.append("yellow") 
popular.append("red") 
popular.append("blue") 
popular.append("red") 
popular.append("yellow") 

をIを使用して行うことができているかを知りたいと言いますこれはPythonのリストを使って行うことができるきちんとした方法です - 私はリストとそれが使用できるすべてのクールなものについてウェブ上のポストを見たことを思い出したようです - これは私が思い出したものの1つでした。

私は、自分のサイトで最も人気のあるページを訪問したいと言っています - 最も訪問されたトップ5ページ - リストや辞書でそれを行うことができますか?それは合理的なアプローチですか?

+0

なぜそれはリストでなければならないのですか?それは間違ったツールです... –

+0

私はすべての選択肢を保存する様々なソリューションを見てきました - 何が思い出されるようですが、リストにはすべての選択肢が保存されていなかったソリューションがありました。だから、10トレンドの色をストアすることができました。しかし、私は私がredbullを夢見ているかもしれないと言った。 – spidee

+0

上記のコメントが表示されても、理由はありません。すべての選択内容を保存するケースではありませんでした。 – spidee

答えて

4

Counterクラスを使用すると、リスト内での出現回数に関する情報を取得できます。

リストを自分で作成している場合は、既にデータが含まれているリストを使用する代わりに、Dictionaryを使用して、各色をキーとしてインクリメントしてください。あなたの編集に基づいて

もっと詳しく:
あなたが選択したアプローチは、データモデルがどのように見えるかに依存します。

サイトの統計情報が第三者のモジュールによって処理された場合、特定のユーザーのサイト訪問のリストを返すAPIのみを提供することがあります。開始点はリストなので、Counterにフィードしてそこからトップ値を引き出すことが理にかなっています。

ただし、このデータを永続的に保存する場合は、値を辞書に直接入力するだけです(ページがキーで、訪問数が値です)。こうすることで、各ページの訪問数にすばやくアクセスして、キーと値のペアを1回だけ繰り返して、上位5ページにあるページを見つけることができます。

0

list.count(x)はあなたにそのxがリストに表示された回数与える:その注文のものからPython Docs

することは非常に簡単です。

4

the right wayで始めることができます:

popular = ['red', 'blue', 'green', 'red', 'yellow', 
      'red', 'blue', 'red', 'yellow'] 

from collections import Counter 
c = Counter(popular) 
# lists the elements and how often they appear 
print c.most_common() 
# -> [('red', 4), ('blue', 2), ('yellow', 2), ('green', 1)] 

@spidee:あなたが言及すると、「トレンド」私はあなたが最後の1000(またはそう)色を見て、どれが最もているかを確認したいという意味を推測一般?

あなたの周りの最後のアイテムを保持し、それらをカウントするカウンタを更新するために、(それはリストのようなものだ)dequeueを使用することができます。

from collections import Counter, deque 

def trending(seq, window=1000, n=5): 
    """ For every item in `seq`, this yields the `n` most common elements. 
     Only the last `window` elements are stored and counted """ 
    c = Counter() 
    q = deque() 
    it = iter(seq) 

    # first iterate `window` times: 
    for _ in xrange(window): 
     item = next(it) # get a item 
     c[item]+=1 # count it 
     q.append(item) # store it 
     yield c.most_common(n) # give the current counter 

    # for all the other items: 
    for item in it: 
     drop = q.popleft() # remove the oldest item from the store 
     c[drop] -=1 
     if c[drop]==0: 
      # remove it from the counter to save space 
      del c[drop] 

     # count, store, yield as above 
     c[item] +=1 
     q.append(item) 
     yield c.most_common(n) 


for trend in trending(popular, 5, 3): 
    print trend 
+0

それは本当にスマートです - 私はそれが私が望むものだと思う、私はそのコードで遊ぶつもりだと私はそれをfuigureことができ、それを働かせるようにする - 少しの助けが必要かもしれない - – spidee

2

あなたはcollections.Counterを持っていないのpython < 2.7を使用している場合あなたはできる:

>>> popular = ['red', 'green', 'blue', 'red', 'red', 'blue'] 
>>> sorted(set(popular), key=lambda color: popular.count(color), reverse=True) 
['red', 'blue', 'green'] 
+0

Pythonでカウンタなし<2.7 –

+0

@ THC4k :ありがとう、ありがとう – mouad

関連する問題