首页 > 解决方案 > python - 如何在Python列表中保留每个日期的第一个和最后一个值?

问题描述

我有一个嵌套列表,其结构如下:

longlist = [["Bob", "2019-12-12 19:03"], ["Joe", "2019-12-12 19:04"], 
["Sally", "2019-12-12 21:07"], ["Jane", "2019-12-13 2:02"], 
["Jose", "2019-12-13 3:04"], ["Ahmed", "2019-12-13 3:06"], 
["Xi", "2019-12-13 7:43"]]

我的目标是只保留每个日期的第一项和longlist最后一项。使用上面的嵌套列表,我想要的输出是:

newlist = [["Bob", "2019-12-12 19:03"], ["Sally", "2019-12-12 21:07"], 
["Jane", "2019-12-13 2:02"], ["Xi", "2019-12-13 7:43"]]

我在整个 SO 和网上搜索,但找不到我要找的东西。有谁知道这怎么可能?

标签: pythonpython-3.xlist

解决方案


您可以使用itertools.groupby( doc ) 并按日期字符串对元素进行分组(拆分后)。

例如:

from itertools import groupby

longlist = [["Bob", "2019-12-12 19:03"], ["Joe", "2019-12-12 19:04"],
            ["Sally", "2019-12-12 21:07"], ["Jane", "2019-12-13 2:02"],
            ["Jose", "2019-12-13 3:04"], ["Ahmed", "2019-12-13 3:06"],
            ["Xi", "2019-12-13 7:43"]]

out = []
for _, g in groupby(longlist, lambda k: k[1].split()[0]):
    first, *_, last = g
    out.extend([first, last])

from pprint import pprint
pprint(out)

印刷:

[['Bob', '2019-12-12 19:03'],
 ['Sally', '2019-12-12 21:07'],
 ['Jane', '2019-12-13 2:02'],
 ['Xi', '2019-12-13 7:43']]

注意:根据您的评论,我没有检查唯一日期(如您所说,所有日期至少有 10 个项目。


推荐阅读