查找列表中最大的重复数字序列

时间:2019-10-09 20:46:40

标签: python list sequence

要解决的问题是在列表中找到最大的重复数字序列。例如,如果列表为[2,3,4,4,4,5,4,7,6],而我正在寻找4的最大序列,则我将返回3。

到目前为止,我只想出了一个循环,该循环对连续指定数字的数量进行计数,但是您必须考虑其他数字,并且还可以比较一个数字,例如3个“ 4”行与2个“ 4”的对比。任何帮助将不胜感激

def find(list):
    x = [2,3,4,4,5,5,5,5,6,7,8]  
    print(find(x))

上面的代码只是基本布局。我不需要整个功能的答案,而只是主要的逻辑和解释

2 个答案:

答案 0 :(得分:0)

如果您尝试在Python中实现此功能,则应使用groupby。默认情况下,itertools.groupby将对象分组为(object_name, list_of_objects)的元组,因此:

a = [1, 0, 1, 1, 2, 2, 2, 3]
groupby(a) ~ [(1, [1]), (0, [0]), (1, [1, 1]), (2, [2, 2, 2]), (3, [3])]
# I use "~" here because it's not actually a list, it's a generator, but meh

您可以轻松地使用列表理解来获取所需的内容。

from itertools import groupby
repeat_lengths = [sum(1 for _ in group) for _, group in groupby(x)]
# the `sum(1 for _ in group)` is a workaround for the fact that `group` is not a list and has no length

然后只找到该列表的最大值。

答案 1 :(得分:0)

您需要跟踪两个变量,即连续值的当前计数(count)和到目前为止的最大计数(max_count)。当您观察到不同的值时,请重置count并更新max_count并继续循环。

def get_longest_seq(l, val):
  count = 0
  max_count = 0
  for e in l:
    if e == val:
      count += 1
    elif count > 0:
      max_count = max(max_count, count)
      count = 0
  max_count = max(max_count, max) # case when the sequence is at the end
  return max_count

l = [2,2,3,2,2,2,2,3,3,4,4,4,5,4,4,7,6]
print(get_longest_seq(l, 4))