0

タイムスタンプのリストがあり、リストの平均を計算したいのですが、土曜日と日曜日の週末を無視し、金曜日と月曜日を1日と見なす必要があります。月曜日から金曜日までの営業日のみを含めたいと思います。これはリストの例です。プロセスを簡単に実行できるように、タイムスタンプを読み取り可能な形式で記述しました。例:

['2011年2月17日水曜日12:57:40'、'2011年2月8日水曜日12:57:40'、'2011年1月25日火曜日17:15:35']
MIN='2011年1月25日火曜日17:15:35'

'2011年2月17日水曜日12:57:40'、この数値とMINの間に週末が6日あるため、この数値を6日間戻します。='2011年2月11日金曜日12:57:40'になります。

「2011年2月8日水曜日12:57:40」、この番号とMINの間に週末が4日あるため、この番号を4日戻します。「2011年2月4日水曜日12:57:40」になります。

新しいリストは現在['2011年2月11日金曜日12:57:40'、'2011年2月4日水曜日12:57:40'、'2011年1月25日火曜日17:15:35]です。

MAX='2011年2月11日金曜日12:57:40'

平均=(2011年2月11日金曜日12:57:40+2011年2月4日水曜日12:57:40+2011年1月25日火曜日17:15:35)/ 3

差=MAX-平均

4

2 に答える 2

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'])
于 2012-11-30T16:03:13.257 に答える
-1

''に基づいて文字列を分割し、最初の要素を取得します。土曜日または日曜日でない場合は、平日です。今、私はあなたが日付のリストの「平均」が何を意味するのかを知る必要があります。

于 2012-11-30T15:14:43.460 に答える