我有一个元组列表,每个元组代表一个日期和当天的相关值。例如
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]。