python list - 存储最流行的颜色

时间:2011-01-06 21:19:26

标签: python list

好吧,我想知道最流行的颜色是什么,我可以使用列表

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个访问量最多的页面 - 我可以用列表或字典来做 - 这会是一种合理的方法吗?

4 个答案:

答案 0 :(得分:4)

您可以使用Counter类获取有关列表中出现次数的信息。

如果您自己构建列表,而不是已经包含数据的列表,您可以使用Dictionary并增加值,每种颜色都是关键。

根据您的修改提供更多详细信息:
您选择的方法取决于您的数据模型。

如果您的站点统计信息由某些第三方模块处理,则它可能仅提供api,以返回给定用户的站点访问列表。由于起点是一个列表,因此将其提供给Counter然后从那里拉出最高值是有意义的。

但是,如果您自己保留这些数据的持久存储,那么将值直接输入字典是有意义的(页面是键,访问计数是值)。通过这种方式,您可以快速访问每个页面的访问次数,并通过键值对上的一次迭代查找前五名中的页面。

答案 1 :(得分: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

答案 2 :(得分:2)

如果你正在使用python< 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']

答案 3 :(得分:0)

list.count(x)会为您提供x在列表中显示的次数:Python Docs

从那个订单来看,事情很容易。