映射功能列表列表中的每个列表

时间:2019-09-18 03:03:10

标签: python

我已完成一项家庭作业,要求我在数据列表中找到最大的持续增长。即[1,2,3,4,5,3,1,2,3]此处最大的静态增加为4。

我编写了一个函数,该函数只包含一个列表,并吐出这样的子列表。

def group_data(lst): 
    sublist= [[lst[0]]] 

    for i in range(1, len(lst)): 
        if  lst[i-1] < lst[i]: 
            sublist[-1].append(lst[i]) 

        else: 
            sublist.append([lst[i]]) 
    return(sublist) 

该做什么?

group_data([1,2,3,4,5,6,7,8,9,10,1,2,3,5,4,7,8])
Out[3]: [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 5], [4, 7, 8]]

现在我想从第一个列表中减去每个列表的最后一个元素,以找到它们之间的差异。但是我很难弄清楚如何将函数映射到每个列表而不是列表的每个元素。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以使用地图功能(其中arr是您的分组列表)

list(map(lambda x: x[-1]-x[0], arr ))

答案 1 :(得分:0)

对于这个问题,我认为itertools.groupby是一个不错的选择。由于您的最终目标是找出最长连续数字的差值:

from itertools import groupby
max_l = max([len(list(g)) - 1 for k, g in groupby(enumerate([1,2,3,4,5,6,7,8,9,10,1,2,3,5,4,7,8]), key=lambda x: x[0] - x[1])])
print(max_l)
#it will print 9

说明: 首先将索引和数字值之间的差异按数字分组。例如,[0, 1, 2, 4]将创建[0, 0, 0, 1],因为0的索引是0,因此0-0=0是第二个1-1=0的索引。然后采用分组列表的最大长度。由于您想要与众不同,因此我使用了len(list(g)) - 1