python计数并附加到列表

时间:2014-03-04 01:27:54

标签: python

我正在计算列表中某些事情发生的次数。是否可以设置变量来遍历每个索引并对其进行计数。我想追加每一个与列表相反的次数 我希望它看起来像这样。忘记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]

3 个答案:

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

生成的计数器对象可以作为字典进行操作,还有其他方便的例程,例如cnt.most_common(n),它将返回n最常见的元素及其计数。

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

答案 2 :(得分: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说更能说服你的问题,但我认为在使用更高级别的工具之前熟悉Python的基础知识会更好