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

时间:2013-10-26 12:13:23

标签: python string list integer sequences

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

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

3 个答案:

答案 0 :(得分: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']

下面:

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

返回:

[['2', '4'], ['6', '8'], ['0', '0', '4', '8']]

现在我们可以在此列表中使用max(使用key=len)来获取最长的序列。 (请注意,在原始代码中,我使用的是带max的生成器表达式,因此列表不会在内存中创建。)

答案 1 :(得分:2)

我认为这是最有效的方式之一

def longest(i):
    curMax = m = 0

    while i != 0:
        d = i % 10 % 2
        i = i / 10
        if d == 0:
            curMax += 1
        else:
            m = max(m, curMax)
            curMax = 0

    return max(m, curMax)

print longest(2456890048)

答案 2 :(得分:1)

您可以使用正则表达式提取所有偶数运行,并使用最大值找到最长的数据

import re

def longest_run(d):
    return max(re.findall('[02468]+', str(d)), key=len)