繁体   English   中英

python计数列表项的出现

[英]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的子类。 它将元素存储在字典中,其中元素作为键存储,其计数作为值。 这允许您计算唯一项目并存储它们出现的次数。

你可以使用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()自动对数组进行排序。 在此了解更多信息

您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM