Python嵌套列表获取特定索引的连续值的差异

时间:2014-10-01 17:02:40

标签: python list

我有一个每天的嵌套列表及其值,格式如下:

a_list = [[datetime,value,counter_value],[datetime,value,counter_value]]

即:

a_list = [['2014-09-27', 2,4],['2014-09-28', 3, 7],['2014-09-29',5,9],['2014-09-30',2,14], ['2014-10-01',2,4]]

请注意,每个嵌套列表的第二个索引值都在逐渐增加,基本上就像一个重置的计数器值。我想知道一种pythonic方法,只减去连续列表的第二个索引,以获得每个区间的计数差异。

如果我想知道2014-09-28有多少计数差异,我会从2014-09-28减去2014-09-27的计数值,即7 - 4 = 3,我的结果将是应该[而不是[' 2014-09-28',3,7])。请注意,2014-09-28的其他读数保持不变。 因此,通过这种方式,最终列表将是:

b_list = [['2014-09-28', 3, **3**],['2014-09-29',5,**2**],['2014-09-30',2,**5**], ['2014-10-01',2,**4**]]

如果当前计数器值小于前一个计数器值,则表示计数器已复位并保持当前值而不减去a_list的最后一个值。 一个pythonic解决方案将得到适当的赞赏。

1 个答案:

答案 0 :(得分:0)

if内使用elselist comprehension

>>> a_list
[['2014-09-27', 2, 4], ['2014-09-28', 3, 7], ['2014-09-29', 5, 9], ['2014-09-30', 2, 14], ['2014-10-01', 2, 4]]
>>> [ a_list[i][:-1] + [a_list[i][2]-a_list[i-1][2]] if a_list[i][2]-a_list[i-1][2] > 0 else a_list[i] for i in range(1,len(a_list)) ]
[['2014-09-28', 3, 3], ['2014-09-29', 5, 2], ['2014-09-30', 2, 5], ['2014-10-01', 2, 4]]