16

オブジェクトのリストを作成しましたがtimedelta、このリストの平均を取得する必要があります。やろうとすると

return (sum(delta_list)/(len(delta_list)-1))

私は得る

TypeError: unsupported operand type(s) for +: 'int' and 'datetime.timedelta'

私はpythonのdatetimeクラスを扱うのが初めてです。また、この平均を日のような形式にする方法も知りたいです:時間:分:分よりも小さいものは必要ありません。

4

4 に答える 4

30

sum0デフォルトでは開始値が必要ですが、0に追加できないtimedeltaため、エラーが発生します。

開始値としてsumaを指定するだけです:timedelta()

# this is the average
return sum(delta_list, timedelta()) / len(delta_list)

印刷するには、次のようにします。

print str(some_delta)

カスタマイズしたものが必要な場合は、取得できますが、その間のすべてを計算する必要がsome_delta.daysあります.some_delta.seconds

于 2011-02-15T16:27:44.333 に答える
4

最初にsum、リストのすべての要素を初期値に追加します。初期値はデフォルトです0(値がゼロの整数)。sumのリストで使用できるようにするには、引数 -timedeltaを渡す必要があります。timedelta(0)sum(delta_list, timedelta(0))

第二に、なぜリストの長さから 1 を引きたいのでしょうか? リストの長さが 1 の場合、ZeroDivisionError.

上記を修正すると、timedeltaオブジェクトは平均になります。それを人間が読める形式に変換する方法は、演習として残しておきます。datetime モジュールのドキュメントは、考えられるすべての質問に答える必要があります。

于 2011-02-15T16:31:45.640 に答える
3

このsum()関数には、イテラブル内のすべての項目を追加するための開始値が必要です。に aを0追加することに関するエラーが発生する理由は、デフォルトです。timedeltaint

これを修正するには、timedeltaオブジェクトを の 2 番目の引数として渡しsumます。

(timedelta引数なしで を作成すると、ゼロの時間差に対応するものが作成されます。)

また、アイテムのセットの平均は通常、アイテムの合計をアイテムの数で割ったものなので、 から 1 を引く必要はありませんlen(delta_list)

これらの変更により、ステートメントから括弧の一部を削除できます。

したがって、これにより次のことが得られます。

return sum(delta_list,timedelta()) / len(delta_list)
于 2011-02-15T16:31:26.343 に答える
1

datetime.timedeltaオブジェクトには、日、マイクロ秒、および秒にアクセスするための属性があります。これらは簡単に参照できます。たとえば、次のようになります。

>>> import datetime
>>> daybefore = datetime.timedelta(days=1)
>>> dayminus2 = datetime.timedelta(days=2, minutes=60)
>>> daybefore.days
1
>>> dayminus2.days, dayminus2.seconds
(2, 3600)

分を求めるには、秒を 60 で割る必要があります。

于 2011-02-15T16:30:54.617 に答える