首页 > 解决方案 > python中是否有一个函数来映射日期的值,如[2011,2012,2013,204]到2011-2014。其中 [2003,2006,2007,2008] 至 2003, 2006-2008

问题描述

我正在处理具有大量连续顺序日期的文件。很少有没有连续顺序的情况,例如 2004、2007、2008。有没有办法编写 python 函数来获取值。

标签: pythonlistloops

解决方案


这是您如何构建一个函数来使用itertools自己对它们进行分组的方法,其他人建议的外部库可能也可以这样做

>>> from itertools import count, groupby
>>> years = [2003, 2006, 2007, 2008]
>>> [list(g) for k, g in groupby(years, key=lambda x, c=count(): x - next(c))]
[[2003], [2006, 2007, 2008]]

获取第一个和最后一个元素

>>> [[next(g)] + list(g)[-1:] for k, g in 
     groupby(years, key=lambda x, c=count(): x-next(c))]
[[2003], [2006, 2008]]

这个怎么运作:

itertools.count给你一个给出值的迭代器0, 1, 2, 3

那么当你有岁月时,例如。2003, 2006, 2007, 2008

用于对年份进行分组的键lambda采用一个参数,在这种情况下x是 the 。year我们还初始化 acount()其中lambda我们从 each 中减去year,给我们

2003, 2005, 2005, 2005

随着count不断增加,例如。

count = 0, 1, 2, 3, ... # as we go on

允许groupby创建正确的组

最后一部分

[next(g)] + list(g)[-1:]

之所以有效,是因为返回的组groupby是迭代器,因此next(g)给了我们组中的第一个元素并list(g)给了我们其余的元素,其中我们取一个切片,如果它存在,它只[-1:]给我们list最后一个元素,否则只是一个空list


推荐阅读