如何解决这个问题
Input: 2
Array = [2,1,3,2,2,2,1,2,2]
Result : 3 (Max of count of seq of 2)
我只是简单地使用for循环,它工作正常。但还有其他有效的方法吗?
for i in array:
if i == input:
Cnt = Cnt + 1
if Cnt > Result:
Result = Cnt;
else:
Cnt = 0
答案 0 :(得分:1)
您可以使用itertools.groupby
:
from itertools import groupby
max(sum(1 for i in g) for k, g in groupby(array) if k == input)
答案 1 :(得分:1)
你可能会在理解中严重滥用副作用:-):
Input = 2
Array = [2,1,3,2,2,2,1,2,2]
r = []
Result = max([(r.append(1),len(r))[1] if x==Input else (r.clear(),0)[1] for x in Array])
如果Python允许在表达式中进行赋值,则不需要那种严格的行为:
r = 0
Result = max([++r if x==Input else r=0 for x in Array]) # What we want, but NOT valid Python!
请注意,如果您不想查看中间结果,可以使用生成器表达式代替列表推导。对于玩具阵列而言无关紧要,但对于包含数十万个元素的数组,生成器可以节省内存。
答案 2 :(得分:0)
我认为您所描述的内容可以通过run length encoding.
解决本质上,您采用一系列数字(最常用于字符或简单的无符号字节)并将其压缩为元组列表,其中一个值表示值,另一个表示一行中出现的次数
array = [2,1,3,2,2,2,1,2,2]
runs = []
count = 0
current = array[0] #setup first iteration
for i in array:
if i == current: #continue sequence
count += 1
else:
runs.append([count, current]) #start new sequence
current = i
count = 1
runs.append([count, current]) #complete last iteration
longest_Sequence = max(runs)