获取整数中偶数位数最长序列的最佳方法

nan*_*han 1 python string integer sequences list

在Python中获取整数中偶数位数最长的序列的最有效方法是什么?例如,如果我的号码为2456890048,则最长的序列应为0048.

是否应将整数转换为字符串以确定最长的序列?或者它应该转换成列表然后,根据每个项目的索引,我们将确定哪个序列最长?或者是否有一种我不了解的更有效的方式(我对Python很新,我不确定解决这个问题的最佳方法是什么).

Ash*_*ary 5

你可以使用itertools.groupbymax:

>>> from itertools import groupby
def solve(strs):
     return max((list(g) for k, g in groupby(strs, key=lambda x:int(x)%2) if not k),
                                                                            key=len)
... 
>>> solve('2456890048') #or pass `str(2456890048)` if you've integers.
['0', '0', '4', '8']
>>> solve('245688888890048')
['6', '8', '8', '8', '8', '8', '8']
Run Code Online (Sandbox Code Playgroud)

这里:

[list(g) for k, g in groupby('2456890048', key=lambda x:int(x)%2) if not k]
Run Code Online (Sandbox Code Playgroud)

收益:

[['2', '4'], ['6', '8'], ['0', '0', '4', '8']]
Run Code Online (Sandbox Code Playgroud)

现在我们可以max在这个列表(with key=len)上应用以获得最长的序列.(请注意,在原始代码中我使用了生成器表达式max,因此列表不会在内存中创建.)