python - 循环遍历行时记住上一行
问题描述
假设我有一个大型 CSV 文件,其中包含有关在给定日期和时间是否下雨的数据。一个玩具示例如下。
Day, Time, Rain
1, 0800, 1
1, 0818, 0
1, 0842, 1
1, 0900, 0
2, 0800, 0
2, 0822, 1
2, 0845, 1
2, 0900, 1
我希望编写可以计算一天中下雨时间比例的代码。我的计算方法如下(从当天的第二次观察开始):
- 如果在该观测和之前的观测之间没有下雨,那么整个时期都不算下雨。
- 如果在该观测和前一个观测之间下雨,则整个时段都被计为下雨
- 如果该观测和之前的观测中恰好有一个正在下雨,则该时段的一半被计为下雨。
例如,第 1 天下雨了 30 分钟(0800 到 0818 的一半,0818 到 0842 的一半,0842 和 0900 的一半)。第 2 天下雨了 49 分钟(从 0800 到 0822 的一半时间,从 0822 到 0900 的一半时间)。
我怎样才能在 Python 中快速做到这一点?我知道for line in file:
遍历每一行,但不存储前一行的内存。
解决方案
我会维护一个变量来保存看到的最后一行并在每次迭代时更新它:
last_line = None
for line in lines:
# You need to change this to explicitly check against None if line can be empty
if not last_line:
# Handle no last line on the first iteration
# Use line and last_line
# Update the last line seen
last_line = line
您也可以last_line
在开始时默认为有效值,这样就无需在循环中检查它。不过,这并不总是可行的。
可以想象还有更复杂的方法,例如lines
使用其自身版本进行压缩,其中每个元素偏移一个,但这可能要简单得多。
推荐阅读
- python - TypeError:字符串索引必须是多处理池的整数
- javascript - 从 ViewPort 中停止视频 - 修复帮助:将 JavaScript 放在一起并修复 iPad 和 iPhone
- node.js - 两个问题,1.关于express router 2.request,response
- bash - 查找 | grep 不搜索名称中带有空格的子文件夹
- batch-file - 如何从 .bat 文件在命令提示符下运行此命令?
- mysql - MySQL 5.6.10 变量:未找到 INNODB_BUFFER_POOL_SIZE?
- powershell - 如何在 PowerShell 2 中索引单个 System.IO.FileInfo 对象
- javascript - 没有 WKScriptMessage 的 WKWebView 回调
- c - 如何在汇编中调用具有大量参数的函数
- python - 在 Markdown 代码块之外查找图像标签