要解决的问题是在列表中找到最大的重复数字序列。例如,如果列表为[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))
上面的代码只是基本布局。我不需要整个功能的答案,而只是主要的逻辑和解释
答案 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))