首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python计数列表项的出现次数

python计数列表项的出现次数
EN

Stack Overflow用户
提问于 2018-01-29 11:32:49
回答 5查看 211关注 0票数 2

我是Python的新手,我被困在如何计算一个数字在列表中出现了多少次。我正在寻找的输出类似于"7次出现2次,4次出现1次“,但我遇到的问题是我正在打印每个my_integer的输出。因此,如果我输入7,7,4作为输入,我得到的结果是"7发生2次,7发生2次,4发生1次“,我正在考虑写一个方法,在count返回后检查数字的唯一性。

代码语言:javascript
复制
integers = input("Enter integers between 1 and 100: ")
split_integers = integers.split()
integer_list = [eval(x) for x in split_integers]

for my_integer in integer_list:
    print(integer_list.count(my_integer))
EN

回答 5

Stack Overflow用户

发布于 2018-01-29 11:41:48

首先,您不需要在这一行中使用eval()

代码语言:javascript
复制
 integer_list = [eval(x) for x in split_integers]

您可以在此处简单地强制转换int()

此外,由于您只计算数字,您甚至不需要从一开始就将它们转换为整数。只有当您需要对这些整数进行一些计算时,转换才是必要的,但由于您只计算唯一的整数,因此将它们保留为字符串在这里很好。

其次,如果您想计算唯一项的数量,可以使用collections.Counter()

代码语言:javascript
复制
from collections import Counter

integers = input("Enter integers between 1 and 100: ")
split_integers = integers.split()

counts = Counter(split_integers)
for k, v in counts.items():
    print(k, 'occurred', v, 'times')

它的工作原理如下:

代码语言:javascript
复制
Enter integers between 1 and 100: 7 7 4 7 4
7 occurred 3 times
4 occurred 2 times

Counter()基本上是dict的一个子类,用于对对象进行计数。它将元素存储在字典中,其中元素作为键存储,而它们的计数作为值存储。这使您可以计算唯一项的数量并存储它们出现的次数。

票数 5
EN

Stack Overflow用户

发布于 2018-01-29 11:42:00

您可以使用set()

代码语言:javascript
复制
for my_integer in set(integer_list):
    count = integer_list.count(my_integer)
    tmp = "{} occurred {} time".format(my_integer, count)
    if count > 1:
        tmp += "s"
    print(tmp)

对于integer_list = [7, 7, 4],它应该打印出来

代码语言:javascript
复制
4 occurred 1 time
7 occurred 2 times

为什么它先打印数字4,然后打印数字7?因为set()会自动对数组进行排序。了解有关它的更多信息here.

票数 2
EN

Stack Overflow用户

发布于 2018-01-29 13:06:52

您可以使用itertools.groupby生成元素及其在列表中出现的次数的dict。应对groupby的输入列表进行排序(升序或降序)。

代码语言:javascript
复制
>>> from itertools import groupby
>>> l = [1,2,2,1,3,3,3,3,4,5,6,6,6]
>>> {k:len(list(v)) for k,v in groupby(sorted(l))}

这将输出

代码语言:javascript
复制
>>> {1: 2, 2: 2, 3: 4, 4: 1, 5: 1, 6: 3}

或者,您可以使用列表理解来生成元组列表,然后将其传递给dict构造函数。这也将产生相同的结果

代码语言:javascript
复制
>>> dict((k,len(list(v))) for k,v in groupby(sorted(l)))
>>> {1: 2, 2: 2, 3: 4, 4: 1, 5: 1, 6: 3}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48493990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档