[英]python count occurrence of list items
我是Python的新手,我一直试图弄清楚如何计算一个数字出现在列表中的次数。 我正在寻找的输出是这样的“7次发生2次,4次发生1次”,但我遇到的问题是我正在打印每个my_integer的输出。 因此,如果我输入7,7,4作为输入,我得到“7发生2次,7次发生2次,4次发生1次”我正在考虑编写一种方法来检查计数返回后的数字的唯一性。
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))
首先,您不需要在此行中使用eval()
:
integer_list = [eval(x) for x in split_integers]
你可以在这里简单地转换int()
。
此外,由于您只计算数字,您甚至不需要将它们转换为整数开头。 如果你需要用这些整数进行一些计算,那么转换只是必要的,但是因为你只计算独特的计算,所以保持它们为字符串在这里工作正常。
其次,如果要计算唯一项,可以使用collections.Counter()
:
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')
其工作原理如下:
Enter integers between 1 and 100: 7 7 4 7 4
7 occurred 3 times
4 occurred 2 times
Counter()
基本上是用于计算对象的dict
的子类。 它将元素存储在字典中,其中元素作为键存储,其计数作为值。 这允许您计算唯一项目并存储它们出现的次数。
您可以使用itertools.groupby
生成元素的dict
以及它在列表中出现的次数。 应该对groupby
的输入列表进行排序(以升序或降序)。
>>> 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))}
这将输出
>>> {1: 2, 2: 2, 3: 4, 4: 1, 5: 1, 6: 3}
或者您可以使用列表推导来生成元组列表,然后将其传递给dict
构造函数。 这也会产生相同的结果
>>> dict((k,len(list(v))) for k,v in groupby(sorted(l)))
>>> {1: 2, 2: 2, 3: 4, 4: 1, 5: 1, 6: 3}
你可以使用字典:
integers = input("Enter integers between 1 and 100: ")
split_integers = integers.split()
integer_list = [eval(x) for x in split_integers]
counts = {}
for my_integer in integer_list:
try:
counts[my_integer] += 1
except KeyError:
counts[my_integer] = 1
for k in counts:
print('Integer {} occurred {} times'.format(k, counts[k]))
没有模块导入:
b = [] #addition 1
for my_integer in integer_list:
if my_integer in b:
print (value, "occurs", integer_list.count(my_integer))
b.append(my_integer)
要么
while len(a) > 0:
value = a[0]
count = a.count(value)
print (value, "occurs", count)
for i in range(count):
a.remove(value)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.