2014-03-04 203 views
1

我试图计算出现在列表中的时间。是否可以设置一个变量来遍历每个索引并对其进行计数。我想追加每一个与列表相反的次数。
我希望它看起来像这样。忘记while循环,只是为了表明我正在循环这个。例如 。并且如果可能的话导入一个图书馆来做一个捷径,或者如果它是唯一的方法。蟒蛇计数和追加到列表

while True: 
    index = 0 
    L = ["brown", "brown", "brown", "red", "red", "yellow", "yellow"] 
    numberOfTimes = L.count([index]) 
    index = index + numberOfTimes 
    numberOfTimesList.append(numberOfTimes) 

我最好再不想再拍名单,让我只看到布朗曾是这样的:

["brown", "red", "yellow"] [3, 2, 2] 

回答

5

使用collections.counter

from collections import Counter 
L = ["brown", "brown", "brown", "red", "red", "yellow", "yellow"] 
cnt = Counter(L) 
print cnt 
print cnt.keys(), cnt.values() 

输出:

Counter({'brown': 3, 'yellow': 2, 'red': 2}) 
['brown', 'yellow', 'red'] [3, 2, 2] 

由此产生的国家ter对象可以作为字典进行操作,还可以使用其他方便的例程,例如cnt.most_common(n),它将返回最常见的元素及其计数。

0

您可以轻松地做到这一点:

[1, 2, 3, 4, 1, 4, 1].count(1) 

上面的代码数量进行计数1出现在列表中的次数。你可以为你的列表做同样的事情。

在你的情况下做到这一点。

for thing in L: 
    # Count variable represents the number of times the thing variable was found 
    count = L.count(thing) 
+0

'count'是之前要熟悉Python的基本当你想计算一件事情的发生时,这很好,但是当你想要统计所有的项目时,它比'collections.Counter'的线性性能要低二次运行时间。 – user2357112

+0

@ user2357112这是如此的真实。 – turnt

0

到Python的基本:

首先,循环或迭代Pythonic方法是:

In [5]: L = ["brown", "brown", "brown", "red", "red", "yellow", "yellow"] 

In [6]: for i in L: 
    ...:  print i 
    ...:  
brown 
brown 
brown 
red 
red 
yellow 
yellow 

其次,要算发生,Python中最基本,最有力的工具:dict将有所帮助。

In [8]: counts = {} 

In [9]: for i in L: 
    ...:  counts[i] = (counts[i] + 1) if (i in counts) else 1 
    ...:  

In [10]: counts 
Out[10]: {'brown': 3, 'red': 2, 'yellow': 2} 

In [11]: counts.keys() 
Out[11]: ['brown', 'yellow', 'red'] 

In [12]: counts.values() 
Out[12]: [3, 2, 2] 

使用collections.Counter为@ YS-L说是比较相信你的问题,但我认为这将是更好期运用更高水平的工具

+1

请勿使用'和'/'或'来模拟[条件表达式](http://legacy.python.org/dev/peps/pep-0308/)。 ''''''或'hack是容易出错并且不必要的。 – user2357112

+1

在将所有内容委托给collections.Counter之前,还需要使用'counts = collections.defaultdict(int)''。 –

+0

@ user2357112谢谢!答案已更正。我知道'和/或'是容易出错的,例如当'true'和'1'返回false时。但我根本不知道“条件表达式”:( – shuiyu