我有一個偶爾打斷的python 2.7應用程序。在循環中恢復循環的pythonic方法
我正在處理一個非常大的數據文件。爲了處理內存限制,我將數據文件分成了由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開始。
這是我提出的解決方案。有沒有更好的,更Python的方式:
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()
我想你應該解釋你想達到什麼,我相信有更多的事情可以用你的代碼的for循環:) –
好點來完成。我會添加詳細信息。 –
DRY(不要重複自己),你可以在使用三元運算的表達,例如:'爲Y_MIN,Y_MAX在y_ranges_resume如果x_min == x_start其他y_ranges:' – AChampion