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
关于Python的基础知识:
首先,Python中最基本的循环或迭代方式是:
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的基础知识会更好。
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)
5
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
个元素及其计数。