我是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))
答案 0 :(得分:5)
首先,您不需要在此行中使用eval()
:
integer_list = [eval(x) for x in split_integers]
你可以在这里简单地投射int()
。
此外,由于您只计算数字,因此您甚至不需要将它们转换为整数。如果你需要用这些整数进行一些计算,那么转换只是必要的,但是因为你只计算独特的计算,所以保持它们为字符串在这里工作正常。
其次,如果您想要计算唯一项目,可以使用https://docs.anaconda.com/accelerate/cublas.html:
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
的子类,用于计算对象。它将元素存储在字典中,其中元素作为键存储,其计数作为值。这允许您计算唯一项目并存储它们出现的次数。
答案 1 :(得分:2)
您可以使用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
为什么在7之前先打印4号?因为set()
会自动对数组进行排序。详细了解collections.Counter()
答案 2 :(得分:2)
您可以使用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}
答案 3 :(得分:1)
您可以使用字典:
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]))
答案 4 :(得分:0)
没有模块导入:
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)