在python中查找列表中数字的运行次数

时间:2017-10-27 01:20:07

标签: python

如何计算列表中数字的出现次数。例如:List = [1,2,2,1,5,1,1,7,7,7,7,7,1,1,3,3,3]。 如何计算连续数字的总运行次数。此外,能够确定哪个数字具有最长的运行次数和多长时间。我知道我可以使用count函数,但是当编写一个函数使得这个函数适用于任何输入列表时由于弄清楚它是哪个数字变得很困难。这是我到目前为止的代码(不起作用,只是一个想法):code

5 个答案:

答案 0 :(得分:1)

一种可能的方法是从列表中创建一个集合,以确定列表的唯一元素。该集合可以在字典理解中用于创建字典对象,其中键对应于列表中实际存在的元素,字典的值对应于元素出现的次数。

L =  [1, 2, 2, 1, 5, 1, 1, 7, 7, 7, 7, 7, 1, 1, 3, 3, 3]

d = {value: L.count(value) for value in set(L)}

或者,您可以使用collections模块中的Counter对象来完成相同的任务。

import collections

d = dict(collections.Counter(L))

找出出现次数最多的是哪个号码

max_key = max(d, key=d.get)

max_value = d[max_key]

print('Max Runs: {}\nLongest Run: {}'.format(max_key, max_value))

答案 1 :(得分:0)

您可以使用itertools.groupby

import itertools
s = [1, 2, 2, 1, 5, 1, 1, 7, 7, 7, 7, 7, 1, 1, 3, 3, 3]
full_listing = [(a, list(b)) for a, b in itertools.groupby(s)]
total_runs = len([a for a, b in full_listing if len(b) > 1])
longest_run = max(full_listing, key=lambda x:len(x[-1]))
print(total_runs)
print(longest_run)

输出:

5
(7, [7, 7, 7, 7, 7]) 

答案 2 :(得分:0)

您可以使用itertools.groupby执行此操作。只要列表中的数字发生变化,它就会创建一个新组。然后使用列表推导来获取数字和计数,并提取最大计数。

from itertools import groupby
lst = [1, 2, 2, 1, 5, 1, 1, 7, 7, 7, 7, 7, 1, 1, 3, 3, 3]
counts = [(i, len(list(g))) for i, g in groupby(lst)]
print max(counts, key=lambda x: x[1])  # first item in tuple is the number, second is the count

答案 3 :(得分:0)

您可以使用馆藏

from collections import Counter

List = [1, 2, 2, 1, 5, 1, 1, 7, 7, 7, 7, 7, 1, 1, 3, 3, 3]
cnt = Counter()
for i in List:
    cnt[i] += 1

答案 4 :(得分:0)

我不是python的程序员,但是占用你的这个案例的语言模糊不清,所以对于本练习你有一个输入并需要三个传送结果,我建议你为每个案例使用一个函数并使用reduce函数{ {3}},

如果reduce的概念对你而言是新的,我推荐这篇文章https://docs.python.org/2/library/functions.html#reduce,它对我在网络中找到的主题更为温和。它是在javascript中但我相信如果你了解核心概念,那么移植到phyton就不会有更大的问题。快乐的编码