1

在Python中获得最长偶数序列的最有效方法是什么?例如,如果我有一个数字 2456890048,那么最长的序列应该是 0048。

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

4

3 回答 3

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这个列表(with key=len)来获得最长的序列。(请注意,在原始代码中,我使用的是生成器表达式max,因此不会在内存中创建列表。)

于 2013-10-26T12:17:07.147 回答
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)
于 2013-10-26T12:23:39.730 回答
1

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

import re

def longest_run(d):
    return max(re.findall('[02468]+', str(d)), key=len)
于 2013-10-26T12:39:48.050 回答