在Python中有条件地在列表中向后和向前迭代

时间:2018-08-18 05:22:36

标签: python

我是Python的新手,我被困在下面的列表中:

IN022023000',20170101,null,126.0, 230, 110
IN022023000',20170102,null,126.0, null, null
IN022023000',20170103,null,126.0, null, null
IN022023000',20170104,null,126.0, null, null
IN022023000',20170105,null,126.0, 250, 110

我正在通过表格创建此列表

(stID,sDate,PRCP,TAVG,TMAX,TMIN)

在这里您可以看到日期20170103的最后一个列的数据丢失。我想实现一种逻辑,该逻辑将根据某些规则填充这些缺失的值。

  1. 如果缺少某个日期((TMAX,TMIN))的后两个值20170103,请移回列表中的上一个日期,并查找TMAX的值,然后TMIN(如果有)将其取值并将其估算到缺失的日期。

  2. 如果后退也给我带来缺失的价值,那么我将向前走一天,做同样的事情。

如何在Python中实现这一目标?

1 个答案:

答案 0 :(得分:0)

我假设null与None相同,并且您的表是一个列表列表。我还假定初始列的每个元素都是字符串文字。 请参阅下面的脚本,它应该是您想要的。

null = None
table = [['IN022023000',20170101,null,126.0, 230, 110],
['IN022023000',20170102,null,126.0, null, null],
['IN022023000',20170103,null,126.0, null, null],
['IN022023000',20170104,null,126.0, null, null],
['IN022023000',20170105,null,126.0, 250, 110]]

for i in range(len(table)):
    if table[i][4:6] == [null, null]:
        if i>0 and table[i-1][4:6] != [null, null]:
            table[i][4:6] = table[i-1][4:6]
        elif i < (len(table)-1):
            table[i][4:6] = table[i+1][4:6]

from pprint import pprint
pprint(table)

使用给定的数据,输出看起来像这样。

[['IN022023000', 20170101, None, 126.0, 230, 110],
 ['IN022023000', 20170102, None, 126.0, 230, 110],
 ['IN022023000', 20170103, None, 126.0, 230, 110],
 ['IN022023000', 20170104, None, 126.0, 230, 110],
 ['IN022023000', 20170105, None, 126.0, 250, 110]]

这是Python的优点,也是学习它的好主意。一旦真正做好了准备,您就可以通过编写简短的小脚本来使用它来自动化各种任务,最终使您的生活变得更加轻松。

相关问题