2011-01-06 1 views
2

хорошо сказать, что я хочу знать, что самый популярный цвет я могу сделать это с помощью спискасписок питон - хранение самый популярный цвет

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") 

что я хочу

red,blue,yellow,green 

есть что это можно сделать с помощью списка Python - я, похоже, вспомнил, что видел в Интернете сообщение о списке и все интересные вещи, для которых он может быть использован, - я помню, это был один из них.

Допустим, я хочу, чтобы пользователи посещали самые популярные страницы на моем сайте - скажем, 5 самых посещаемых страниц - могу ли я сделать это со списком или словарем - и это был бы разумный подход?

+0

Почему это должен быть список? Это неправильный инструмент ... –

+0

Я видел различные решения, в которых будут храниться все варианты - что, похоже, напоминало решение, в котором список не хранит каждый выбор - просто самый популярный или тренда? Таким образом, можно было сказать, что хранят 10 трендовых цветов. Но, как я сказал, я могу мечтать о Redbull. – spidee

+0

Нет причин, если вы видите мой вышеприведенный комментарий - это не случай хранения всех выборов - так, возможно, это было трендом? – spidee

ответ

4

Вы можете использовать класс Counter, чтобы получить информацию о количестве вхождений в списке.

Если вы строите список самостоятельно, вместо уже имеющего список, содержащий данные, вы можете просто использовать Dictionary и увеличивать значение с каждым цветом, являющимся ключом.

Более подробно на основе вашего редактирования:
подход вы выбираете, зависит от того, что ваша модель данных выглядит следующим образом.

Если ваша статистика сайта обрабатывается каким-либо сторонним модулем, она может содержать только api, которая возвращает список посещений сайта для данного пользователя. Поскольку отправной точкой является список, имеет смысл просто подать его на Counter, а затем извлечь верхние значения.

Однако, если вы храните постоянное хранилище этих данных самостоятельно, имеет смысл просто подставлять значения прямо в словарь (страница - это ключ, число посещений - значение). Таким образом, вы можете быстро получить доступ к счету посещений для каждой страницы и найти, какие страницы находятся в первой пятерке, всего одна итерация по парам ключ-значение.

0

list.count(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

Thats really smart - я думаю, что это то, что я хочу, я буду играть с этим кодом и посмотреть, смогу ли я его настроить и заставить его работать - может понадобиться небольшая помощь - – spidee

2

если вы используете питона < 2.7, которые не имеют collections.Counter вы можете сделать:

>>> 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

Смежные вопросы