在Python中获取最长偶数位序列的最有效方法是什么?例如,如果我有一个数字2456890048,最长的序列应该是0048.获取整数中最长序列的偶数位数的最佳方法
整数应该转换为字符串以确定最长的序列吗?还是应该将它转换成列表,然后根据每个项目的索引,我们将确定哪个序列最长?还是有没有更有效的方式,我不知道(我对Python很新,我不知道什么是解决这个问题的最好方法)。
在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
(与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)
您可以提取一个所有使用正则表达式的偶数运行,并找到最长使用最大值。
import re
def longest_run(d):
return max(re.findall('[02468]+', str(d)), key=len)
这可能不是最高效的,但它可能是最优雅的IMO。 – senderle
谢谢!使用itertools过程,我将如何去查找序列在原始数字中以什么索引开始? – nanachan
@nanachan是的,你需要遍历'enumerate(strs)'。 –