2

それぞれが日付とその日に関連付けられた値を表すタプルのリストがあります。例えば

team_effort = [('2012-09-10', 27), ('2012-09-11', 28), 
               ('2012-09-12', 28), ('2012-09-13', 31), ('2012-09-14', 31)]

毎日の値の差を計算し、日付と値 (値が同じまたは減少した場合は 0、増加した場合は差) を持つタプルの同様のリストを返す必要があります。

したがって、この例では戻りたい

[('2012-09-10', 0), ('2012-09-11', 1), 
 ('2012-09-12', 0), ('2012-09-13', 3), ('2012-09-14', 0)]

次のリスト内包表記は機能します (2.4+)

[(data[0], 0) if i == 0
    else (data[0], data[1] - team_effort[i-1][1]) if data[1] > team_effort[i-1][1]
    else (data[0], 0)
    for i, data in enumerate(team_effort)]

しかし、もっとエレガントな解決策があると思いますか? 助言がありますか?

エフォート データ [0] は常にゼロであり、エフォート データ [i-1] [1] 行に到達した場合、リストの最後の項目 (別名エフォート データ [-1] ][1]。

4

6 に答える 6

1
print (
    [(team_effort[0][0], 0)] +
    [(date[0], max(date[1] - prev_date[1], 0))
        for date, prev_date in zip(team_effort[1:], team_effort[:-1])])
于 2013-08-13T13:15:41.830 に答える