在Python中获取整数中偶数位数最长的最有效方法是什么?例如,如果我的号码为2456890048,则最长的序列应为0048。
是否应将整数转换为字符串以确定最长的序列?或者它应该转换成列表然后,根据每个项目的索引,我们将确定哪个序列最长?或者是否有一种我不了解的更有效的方式(我对Python很新,我不确定解决这个问题的最佳方法是什么)。
答案 0 :(得分:5)
您可以使用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
(使用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)