【问题标题】:How to group element in list with python 2.7 [closed]如何使用python 2.7对列表中的元素进行分组[关闭]
【发布时间】:2017-02-23 14:16:14
【问题描述】:

我在不同日期有汽车位置 (X,Y):

input =[
         [21/01/2017,"carA",2053005.39445,701577.391706],
         [22/01/2017,"carA",2053005.39445,701577.391706],
         [23/01/2017,"carA",2053005.39445,701577.391706],
         [24/01/2017,"carA",2052759.49583,701843.214278],
         [25/01/2017,"carA",2052759.49583,701843.214278]
       ]

前三行的位置相同,后两行的位置也相同。我想将开始日期和结束日期存储在这样的新列表中:

output=[
        [21/01/2017,23/01/2017,"carA",2053005.39445,701577.391706],
        [24/01/2017,25/01/2017,"carA",2052759.49583,701843.214278]
       ]

【问题讨论】:

  • 看看itertools.groupby
  • @depperm 这不是我想要做的。我尝试按汽车位置(X,Y)对日期进行分组,并将开始日期、结束日期和汽车位置存储在其他列表中。所以,我每个输出行都有一个新元素(结束日期)

标签: python list


【解决方案1】:

正如已经提议的那样,itertools.groupby 可以使用。但是您的输入必须(正确)排序,因为它只对连续项目进行分组:

from itertools import groupby
from operator import itemgetter

output = []
for key, group in groupby(input, key=itemgetter(2, 3)):
    group = list(group)
    output.append([group[0][0], group[-1][0]] + group[0][1:])

output
# [['21/01/2017', '23/01/2017', 'carA', 2053005.39445, 701577.391706],
#  ['24/01/2017', '25/01/2017', 'carA', 2052759.49583, 701843.214278]]

另一个提示:input 是内置函数,通常不建议使用同名变量!


请注意,此类列表通常很难在以后处理。您可以将它们存储为 collections.namedtuple 以提供更多上下文。

【讨论】:

    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多