如何创建增加范围的计数器?

时间:2011-04-19 20:44:25

标签: python

在我正在运行的脚本中,存在内存泄漏问题(由于使用了专有软件),这会阻止脚本运行超过325k次迭代。为了解决这个问题,我创建了一个值列表,以便在for循环中迭代,如下所示:

squery = 
['OBJECTID >=0 AND OBJECTID <=300000',
'OBJECTID >=300001 AND OBJECTID <=600000',
'OBJECTID >=600001 AND OBJECTID <=900000',
....
'OBJECTID >=8700001 AND OBJECTID <=8766184']

for query in squery:
    do work

是否有方法以300k间隔创建这些范围,以便可以在运行时以一定间隔构建列表,直到值达到X?如同,900k记录的3个间隔,以及150万个记录的5个间隔。

2 个答案:

答案 0 :(得分:4)

squery =
['OBJECTID>=%s AND OBJECTID<=%s' % (i*300k+(i!=0),(i+1)*300k) for i in range(0,3)]

(300k = 300 000,间隔数在range(0,*3*)

答案 1 :(得分:1)

为了完整起见,生成器也可以很好地解决这个问题:

def generator_function(n):
    for i in range(0,n):
        yield ('OBJECTID>=%s AND OBJECTID<=%s' % (i*300000+(i!=0),(i+1)*300000))

# now use it:
for each_string in generator_function(3):
    print each_string

此方法动态生成每个字符串,因此在某些情况下可能更为可取(例如,如果您想生成大量字符串而不是仅生成5个字符串 - 在这种情况下,itertools是生成器的良好伴侣)。 / p>

相关问题