如何在Python中找到最长的连续奇数子序列?

2024-04-24 09:48:32 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我的序列是:[2, 6, 8, 3, 9, 1, 5, 6, 1, 3, 5],那么答案应该是[3,9,1,5],因为有两个子序列[1, 3, 5]和{}。最长的一个应该作为答案返回。任何帮助都将不胜感激。在


Tags: 答案序列
2条回答

你可以试试这个:

l = [2, 6, 8, 3, 9, 1, 5, 6, 1, 3, 5]
final_list = []
for i in l:
   new_l = []
   if i%2 == 0:
      final_list.append(new_l)
      new_l = []
   else:
       new_l.append(i)

print(max(final_list, key=len))

输出:

^{pr2}$

您可以使用以下复杂的一行程序:

from itertools import groupby
from operator import itemgetter

max(map(list,map(itemgetter(1),filter(itemgetter(0),groupby(data,key=lambda x:x&1)))),key=len)

使用data输入列表。在

我们先把它分成几个部分:

^{pr2}$

该算法在O(n)中运行,因为它在data列表上执行固定数量的传递(由于懒惰它实际上只扫描一次列表)。所有检查都是O(1)(对于每个元素检查),或O(k)(每个突发的长度为k)。在

您可以用(kudos to @PM2Ring)以一种不太实用的风格重写上面的内容:

max((list(g) for k,g in groupby(data,key=lambda x:x&1) if k),key=len)

它相当于上面的内容,但是没有那么多的点空闲(这是函数式编程中的一个术语)。在

相关问题 更多 >