python计数列表项的出现

时间:2018-01-29 03:32:49

标签: python python-3.x

我是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))

5 个答案:

答案 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)