Python 计数并追加到列表

1 投票
3 回答
6028 浏览
提问于 2025-04-17 20:42

我想要统计一个列表中某个东西出现的次数。请问有没有办法设置一个变量,逐个查看每个位置并进行计数。我想把每个东西出现的次数添加到一个列表里。
我希望结果看起来像这样。忘掉那个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

使用 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 个元素及其计数。

撰写回答