我正在使用 for 循环遍历二维列表:
def itr(lpic, lH, lW, x, y):
'''lpic=2D-Array; lH=Row_count; lW=Column_count;'''
stack = []
range_x = range(x-1, x+2)
range_y = range(y-1, y+2)
append = stack.append
for i in range_x:
if 0<=i<lH:#i is a valid index *Updated
for j in range_y:
if (0<=j<lW) and (lpic[i][j]=="0"):
lpic[i][j] = "1"
append([i, j])
return stack
我想知道是否有更好的方法可以用 Python2.5 做同样的事情。
最佳答案
您的代码有两个简单的优化:
xrange
代替 range
。这将阻止生成两个临时列表。 min
的参数中使用max
和xrange
以省略外循环中的'if'。所以你的代码看起来像这样:def itr(lpic, lH, lW, x, y):
'''lpic=2D-Array; lH=Row_count; lW=Column_count;'''
stack = []
range_x = xrange(max(0,x-1), min(lH,x+2))
range_y = xrange(max(0,y-1), min(lW,y+2))
append = stack.append
for i in range_x:
for j in range_y:
if lpic[i][j]=="0":
lpic[i][j] = "1"
append([i, j])
return stack
这将略微提高性能。
关于Python:高效迭代多维列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8260939/