我有一个二维数组,其中一个有序列包含日期时间:
01/01/2000 06:30:00, string, string
01/01/2000 08:30:00, string, string
01/01/2000 10:30:00, string, string
...
02/01/2000 06:30:00, string, string
02/01/2000 08:30:00, string, string
02/01/2000 10:30:00, string, string
当我遍历数组时,我不想对每个元素执行操作,而是希望它将它们分组为舍入日期,将其作为子集处理,然后转到下一个组以进行下一个日期。
感觉有点笨拙,但是我需要一行一行地把它们收集到临时数组中,工作,冲洗,然后继续前进?或者是否有一个Python设施可以用这种方式处理日期和时间的更优雅的迭代器?
答案 0 :(得分:0)
您应该可以使用groupby
将它们列入列表。
我有有序数据的示例列表,其中datetime是第一个元素,我希望我明白你的意思:
old = [[datetime.datetime(2017, 1, 1, 3, 0), 'test'],
[datetime.datetime(2017, 1, 1, 6, 0), 'test'],
[datetime.datetime(2017, 1, 1, 9, 0), 'test'],
[datetime.datetime(2017, 1, 2, 9, 0), 'test'],
[datetime.datetime(2017, 1, 2, 12, 0), 'test'],
[datetime.datetime(2017, 1, 3, 2, 0), 'test'],
[datetime.datetime(2017, 1, 3, 8, 0), 'test']]
您可以使用lambda函数执行操作,并按日期/时间进行比较/分组。例如,现在我只按日期分组。
from itertools import groupby
new = []
for key, group in groupby(old, lambda x: x[0].date()):
new.append(list(group))
结果是按日期分组的列表列表。
[[[datetime.datetime(2017, 1, 1, 3, 0), 'test'],
[datetime.datetime(2017, 1, 1, 6, 0), 'test'],
[datetime.datetime(2017, 1, 1, 9, 0), 'test']],
[[datetime.datetime(2017, 1, 2, 9, 0), 'test'],
[datetime.datetime(2017, 1, 2, 12, 0), 'test']],
[[datetime.datetime(2017, 1, 3, 2, 0), 'test'],
[datetime.datetime(2017, 1, 3, 8, 0), 'test']]]