Python 如何用一种更简单的方式写这个

Python 如何用一种更简单的方式写这个,python,optimization,refactoring,Python,Optimization,Refactoring,如您所见,我正在使用5x5px正方形对图像进行迭代,并在其中设置像素 上面的代码显然适用于尺寸为10x10px的图像,但我想以更通用的方式编写上面的代码,这样我就可以将其用于更大的图像(比如30x30px),而无需添加32个新的for循环 i = 0 for x in range(0, 5): for y in range(0, 5): if 0 == outputAfterLearning[i]: image.putpixel((x, y), (

如您所见,我正在使用5x5px正方形对图像进行迭代,并在其中设置像素

上面的代码显然适用于尺寸为10x10px的图像,但我想以更通用的方式编写上面的代码,这样我就可以将其用于更大的图像(比如30x30px),而无需添加32个新的for循环

i = 0
for x in range(0, 5):
    for y in range(0, 5):
        if 0 == outputAfterLearning[i]:
            image.putpixel((x, y), (0, 0, 0))
        elif 1 == outputAfterLearning[i]:
            image.putpixel((x, y), (255, 255, 255))
        i += 1

for x in range(0, 5):
    for y in range(5, 10):
        if 0 == outputAfterLearning[i]:
            image.putpixel((x, y), (0, 0, 0))
        elif 1 == outputAfterLearning[i]:
            image.putpixel((x, y), (255, 255, 255))
        i += 1

for x in range(5, 10):
    for y in range(0, 5):
        if 0 == outputAfterLearning[i]:
            image.putpixel((x, y), (0, 0, 0))
        elif 1 == outputAfterLearning[i]:
            image.putpixel((x, y), (255, 255, 255))
        i += 1

for x in range(5, 10):
    for y in range(5, 10):
        if 0 == outputAfterLearning[i]:
            image.putpixel((x, y), (0, 0, 0))
        elif 1 == outputAfterLearning[i]:
            image.putpixel((x, y), (255, 255, 255))
        i += 1
但我会为块迭代创建一个生成器:

xdim, ydim = 10, 10
xblocksize, yblocksize = 5, 5
for xblock in range(0, xdim, xblocksize):
   for yblock in range(0, ydim, yblocksize):
      for x in range(xblock, xblock+xblocksize):
         for y in range(yblock, yblock+yblocksize):
            # the common code.
并使用putpixel作为

def blocked(xdim, ydim, xblocksize, yblocksize):
  for xblock in range(0, xdim, xblocksize):
     for yblock in range(0, ydim, yblocksize):
        for x in range(xblock, xblock+xblocksize):
           for y in range(yblock, yblock+yblocksize):
              yield (x, y)
color=[(0,0,0),(255255)]
对于颜色代码,zip中的pixelloc(outputAfterLearning,blocked(10,10,5,5)):

如果0,我也会将公共代码生成一个具有dims和sizes参数的函数,以便可以与不同大小的/dims图片反复使用。提示:使用xrange()而不是range(),它会生成一个迭代器,而不是整个列表。因为您实际上并没有使用列表[0,1,2,3,4,5],而是使用值1,2,3,4,5。
color = [(0,0,0),(255,255,255)]
for colorcode, pixelloc in zip(outputAfterLearning, blocked(10, 10, 5, 5)):
   if 0 <= colorcode < len(color):
   # ^ omit this if outputAfterLearning[i] is always valid
     image.putpixel(pixelloc, color[colorcode])