python - python中是否有一个函数来映射日期的值,如[2011,2012,2013,204]到2011-2014。其中 [2003,2006,2007,2008] 至 2003, 2006-2008
问题描述
我正在处理具有大量连续顺序日期的文件。很少有没有连续顺序的情况,例如 2004、2007、2008。有没有办法编写 python 函数来获取值。
解决方案
这是您如何构建一个函数来使用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
推荐阅读
- python - 为什么在使用 id() 时用整数分配变量总是不变的?
- flutter - UTF-16LE txt 文件在 Flutter (dart) 中解码为字符串
- sql - sql:预期 0 个参数,得到 2 个
- javascript - 重定向后烧瓶模板不呈现
- python - 使用成对求和,我需要多少项才能得到明显错误的结果?
- python - 我需要帮助查找带有定位器的元素
- types - 使 OCaml 模块签名显示它们的类型
- javascript - Jquery 自定义右键单击并在新选项卡中打开
- python-3.x - 使用参数调用 Tkinter var 跟踪
- c++ - 在不存在的目录中打开文件 c 与 c++