我是Python的新手,我被困在如何计算一个数字在列表中出现了多少次。我正在寻找的输出类似于"7次出现2次,4次出现1次“,但我遇到的问题是我正在打印每个my_integer的输出。因此,如果我输入7,7,4作为输入,我得到的结果是"7发生2次,7发生2次,4发生1次“,我正在考虑写一个方法,在count返回后检查数字的唯一性。
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))发布于 2018-01-29 11:41:48
首先,您不需要在这一行中使用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 timesCounter()基本上是dict的一个子类,用于对对象进行计数。它将元素存储在字典中,其中元素作为键存储,而它们的计数作为值存储。这使您可以计算唯一项的数量并存储它们出现的次数。
发布于 2018-01-29 11:42:00
您可以使用set()。
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],它应该打印出来
4 occurred 1 time
7 occurred 2 times为什么它先打印数字4,然后打印数字7?因为set()会自动对数组进行排序。了解有关它的更多信息here.
发布于 2018-01-29 13:06:52
您可以使用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}https://stackoverflow.com/questions/48493990
复制相似问题