在Python中获得最长偶数序列的最有效方法是什么?例如,如果我有一个数字 2456890048,那么最长的序列应该是 0048。
是否应该将整数转换为字符串以确定最长序列?还是应该将其转换为列表,然后根据每个项目的索引确定哪个序列最长?还是有一种我不知道的更有效的方法(我对 Python 很陌生,我不确定解决这个问题的最佳方法是什么)。
您可以使用itertools.groupby
和max
:
>>> 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
,因此不会在内存中创建列表。)
我认为这是最有效的方式之一
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)
您可以使用正则表达式提取所有偶数运行,并使用 max 找到最长的。
import re
def longest_run(d):
return max(re.findall('[02468]+', str(d)), key=len)