我正在使用 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 的参数中使用maxxrange 以省略外循环中的'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/

    10-13 09:28