python - 在循环中恢复循环的Pythonic方法是什么

标签 python python-2.7 for-loop resume

我有一个 python 2.7 应用程序,我偶尔会中断它。

我正在处理一个非常大的数据文件。为了解决内存限制,我将数据文件划分为由 x 和 y 分量标识的网格。每个网格都是独立处理的。

处理需要很长时间,因此有时我需要在某个时刻停止处理。理想情况下,我想更新 y_start 和 x_start 并在我停止的地方恢复应用程序(不处理已经处理过的网格)。

主要操作发生在嵌套的 for 循环中:

x_start=0.0
x_step=0.05
x_size=10.0
y_start=0.0
y_step=0.05
y_size=10.0

x_ranges = zip(np.arange(x_start,x_size,x_step), np.arange(x_step+x_start,x_size+x_step,x_step))

y_ranges = zip(np.arange(0.0,y_size,y_step), np.arange(y_step,y_size+y_step,y_step))


for x_min,x_max in x_ranges:
    for y_min,y_max in y_ranges:

        doAction()

在上面的代码中,我处理了 x_start。 y_start 仅应在 x_min = x_start 时使用。对于 x 的所有其他值,它应从 0.0 开始。

这是我提出的解决方案。有没有更好、更Pythonic的方法:

y_ranges_resume = zip(np.arange(y_start,y_size,y_step),np.arange(y_start+y_step,y_size+y_step,y_step)

for x_min,x_max in x_ranges:
    if x_min == x_start:     
        for y_min,y_max in y_ranges_resume:
            doAction()
    else:
        for y_min,y_max in y_ranges:
            doAction()

最佳答案

我不确定是否有更Pythonic的方式,但你可以像这样重写它(实际上用任何语言):

y_ranges_resume = zip(np.arange(y_start,y_size,y_step),np.arange(y_start+y_step,y_size+y_step,y_step)

for x_min,x_max in x_ranges:
    y_ranges_used = y_ranges
    if x_min == x_start:     
        y_ranges_used = y_ranges_resume

    for y_min,y_max in y_ranges_used:
        doAction()

至少内部循环只被写入一次。

或者,您可以使用三元,但我的错误是更容易阅读而不是更小的代码。但为了完整起见,您可以这样编写相同的内容:

y_ranges_resume = zip(np.arange(y_start,y_size,y_step),np.arange(y_start+y_step,y_size+y_step,y_step)

for x_min,x_max in x_ranges:
    for y_min, y_max in y_ranges_resume if x_min == x_start else y_ranges:
        doAction()

关于python - 在循环中恢复循环的Pythonic方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37868942/

相关文章:

python - 将 numpy 函数映射到 PyPolars 中的列 - 指定类型

php - Web 开发人员将哪些工具与 PHP、Ruby on Rails、Python 等一起使用?

python - 文档字符串中 __init__ 的返回类型

macos - 不能 "sudo pip uninstall"在 OS X El Capitan 中不允许操作 (/tmp)

c - 初始化数组时出现段错误

python - 如何在 Python 中将函数作为函数参数传递

python - 如何检测控制台是否支持 Python 中的 ANSI 转义码?

arrays - 将数组切片为反向重叠的子数组

python - 使用循环将值保存在数组中

python - 在 python for 循环中,跳过值