我有一个时间戳列表,我想计算列表的平均值,但我需要忽略星期六和星期日的周末日,并将星期五和星期一视为一天。我只想包括周一到周五的工作日。这是列表的一个例子。我以可读格式编写了时间戳,以便轻松地遵循该过程。 例如:
['Wed Feb 17 12:57:40 2011','Wed Feb 8 12:57:40 2011','Tue Jan 25 17:15:35 2011']
MIN ='Tue Jan 25 17:15:35 2011'
'Wed Feb 17 12:57:40 2011',因为我们在这个数字与MIN之间有6个周末,我将这个数字转回6天。这将是''2011年2月11日星期五12:57:40'。
'Wed Feb 8 12:57:40 2011',因为我们在这个数字和MIN之间有4个周末天,我将这个数字转回4天,这将是'Wed Feb 4 12:57:40 2011'
新名单现在是['2011年2月11日星期二12:57:40','2011年2月4日12:57:40','2011年1月25日星期二17:15:35']
MAX ='Fri Feb 11 12:57:40 2011'
average =(2011年2月11日星期五12:57:40 + 2011年2月4日星期二12:57:40 + 2011年1月25日星期二17:15:35)/ 3
差异=最大 - 平均值
答案 0 :(得分:0)
编辑: [删除了之前的代码,其中包含错误;替换为下面的代码。]
以下是代码中的一些输出,这些输出会挤出周末,计算平均值,并将周末重新放入以获得明显有效的平均值。代码显示在一些测试用例的输出之后。
['Fri Jan 13 12:00:00 2012', 'Mon Jan 16 11:00:00 2012']
Average = Fri Jan 13 23:30:00 2012
['Fri Jan 13 12:00:00 2012', 'Mon Jan 16 13:00:00 2012']
Average = Mon Jan 16 00:30:00 2012
['Fri Jan 13 14:17:58 2012', 'Sat Jan 14 1:2:3 2012', 'Sun Jan 15 4:5:6 2012', 'Mon Jan 16 11:03:29 2012', 'Wed Jan 18 14:27:17 2012', 'Mon Jan 23 10:02:12 2012', 'Mon Jan 30 10:02:12 2012']
Average = Thu Jan 19 16:46:37 2012
['Fri Jan 14 14:17:58 2011', 'Mon Jan 17 11:03:29 2011', 'Wed Jan 19 14:27:17 2011', 'Mon Jan 24 10:02:12 2011']
Average = Wed Jan 19 00:27:44 2011
Python代码:
from time import strptime, mktime, localtime, asctime
from math import floor
def averageBusinessDay (dates):
f = [mktime(strptime(x)) for x in dates]
h = [x for x in f if localtime(x).tm_wday < 5] # Get rid of weekend days
bweek, cweek, dweek = 3600*24*5, 3600*24*7, 3600*24*2
e = localtime(h[0]) # Get struct_time for first item
# fm is first Monday in local time
fm = mktime((e.tm_year, e.tm_mon, e.tm_mday-e.tm_wday, 0,0,0,0,0,0))
i = [x-fm for x in h] # Subtract leading Monday
j = [x-floor(x/cweek)*dweek for x in i] # Squeeze out weekends
avx = sum(j)/len(j)
avt = asctime(localtime(avx+floor(avx/bweek)*dweek+fm))
return avt
def atest(dates):
print dates
print 'Average = ', averageBusinessDay (dates)
atest(['Fri Jan 13 12:00:00 2012', 'Mon Jan 16 11:00:00 2012'])
atest(['Fri Jan 13 12:00:00 2012', 'Mon Jan 16 13:00:00 2012'])
atest(['Fri Jan 13 14:17:58 2012', 'Sat Jan 14 1:2:3 2012', 'Sun Jan 15 4:5:6 2012', 'Mon Jan 16 11:03:29 2012', 'Wed Jan 18 14:27:17 2012', 'Mon Jan 23 10:02:12 2012', 'Mon Jan 30 10:02:12 2012'])
atest(['Fri Jan 14 14:17:58 2011', 'Mon Jan 17 11:03:29 2011', 'Wed Jan 19 14:27:17 2011', 'Mon Jan 24 10:02:12 2011'])
答案 1 :(得分:-1)
根据''拆分字符串,取第一个元素,如果它不是星期六或星期日,那就是工作日。现在我需要通过日期列表的“均值”来了解你的意思。