繁体   English   中英

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

[英]Iterate backward and forward in a list conditionally in 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. 如果缺少某个日期( 20170103 )的最后两个值(TMAX,TMIN) ,则移回列表中的上一个日期,并查找TMAXTMIN的值(如果存在)将其取值并将其估算到缺失的日期。

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

如何在Python中实现?

我假设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的优点,也是学习它的好主意。 一旦真正做好准备,您就可以通过编写简短的小脚本来使用它来自动化各种任务,最终使您的生活变得更加轻松。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM