将列表中的元素(日期时间)汇总为一个值

2 投票
2 回答
1156 浏览
提问于 2025-04-18 18:34

我想把一个列表里的元素连接起来。

比如说:

l=[0,1,2,3,4,5,6,7,8,9]

我想得到:

l_concatenated=45

我的代码是:

  from datetime import *
  data=[[datetime.datetime(2012, 8, 19, 15, 28, 2, 810000), 159],
  [datetime.datetime(2012, 8, 19, 15, 28, 2, 811000), 159],
  [datetime.datetime(2012, 8, 19, 15, 28, 3, 108000), 159],
  [datetime.datetime(2012, 8, 19, 15, 28, 3, 108000), 159],
  [datetime.datetime(2012, 8, 19, 15, 28, 3, 182000), 159],
  [datetime.datetime(2012, 8, 19, 15, 28, 3, 182000), 159],
  [datetime.datetime(2012, 8, 19, 15, 28, 3, 326000), 159],
  [datetime.datetime(2012, 8, 19, 15, 28, 3, 326000), 159]]

  date=[i[0] for i in data]
  interval=[b-a for a,b in zip(date[:-1],date[1:])]
  sorted_interval=[item for item in interval if item!=timedelta(0)]
  # It doesn't function and just give wrong information
  interval_concatenated=[ko[i]+ko[i+1] for i in range(len(sorted_interval)-1)]

补充一下:我需要计算两个日期之间的平均间隔。通过 interval=[b-a for a,b in zip(date[:-1],date[1:])] 这段代码,我可以得到两个连续值之间的间隔。

举个例子:它可能看起来像 interval=[timedelta(0, 0, 297000),timedelta(0, 0, 297000),timedelta(0, 0, 123000),timedelta(0, 1, 300000)],我想要计算这个间隔的平均值。

2 个回答

0

我想你是在找这个:

import datetime
import time

data=[[datetime.datetime(2012, 8, 19, 15, 28, 2, 810000), 159],
      [datetime.datetime(2012, 8, 19, 15, 28, 2, 811000), 159],
      [datetime.datetime(2012, 8, 19, 15, 28, 3, 108000), 159],
      [datetime.datetime(2012, 8, 19, 15, 28, 3, 108000), 159],
      [datetime.datetime(2012, 8, 19, 15, 28, 3, 182000), 159],
      [datetime.datetime(2012, 8, 19, 15, 28, 3, 182000), 159],
      [datetime.datetime(2012, 8, 19, 15, 28, 3, 326000), 159],
      [datetime.datetime(2012, 8, 19, 15, 28, 3, 326000), 159]]

date = [time.mktime(i[0].timetuple()) for i in data]

average = datetime.datetime.fromtimestamp(sum(date)/len(date))

首先,把日期时间对象转换成Posix时间,然后计算平均值,最后再把它转换回来。

3

首先,你可以通过使用 zip 来计算连续日期之间的时间间隔:

intervals = [d2[0] - d1[0] for (d1, d2) in zip(data, data[1:])]

接着,计算总的 timedelta(时间差):

total_interval = sum(intervals, timedelta(0, 0, 0))

最后,算出平均值:

average_interval = total_interval / len(intervals)

撰写回答