Python 如何使用列表理解实现以下代码?

Python 如何使用列表理解实现以下代码?,python,list-comprehension,Python,List Comprehension,如何使用列表理解实现以下代码 for r in range(row): for c in range(column): print [r,c] Thx找到了它: [[print([r,c]) for c in range(column)] for r in range(row)] 谢谢你,麦克森。没有喝足够的咖啡,忘记了如何用英语和母语说“嵌套”: 更新: 我将坚持大卫的解决方案: [ax.axis('off') for ax in axes.flatten()]

如何使用列表理解实现以下代码

for r in range(row):
    for c in range(column):
        print [r,c]
Thx找到了它:

[[print([r,c]) for c in range(column)] for r in range(row)]
谢谢你,麦克森。没有喝足够的咖啡,忘记了如何用英语和母语说“嵌套”:

更新: 我将坚持大卫的解决方案:

 [ax.axis('off') for ax in axes.flatten()]
对于此解决方案,我可以减少以下代码:

# Plot the result
row, column = [3, 2]
figure, axes = plt.subplots(row, column, figsize=(15, 10))
figure.tight_layout()

axes[0,0].imshow(image)
axes[0,0].set_title('Original Image', fontsize=15)
axes[0,0].axis('off')

axes[0,1].imshow(img_solution, cmap='gray')
axes[0,1].set_title('Expected result', fontsize=15)
axes[0,1].axis('off')

axes[1,0].imshow(gradx, cmap='gray')
axes[1,0].set_title('gradx', fontsize=15)
axes[1,0].axis('off')

axes[1,1].imshow(grady, cmap='gray')
axes[1,1].set_title('grady', fontsize=15)
axes[1,1].axis('off')

axes[2,0].imshow(mag_binary, cmap='gray')
axes[2,0].set_title('mag_binary', fontsize=15)
axes[2,0].axis('off')

axes[2,1].imshow(dir_binary, cmap='gray')
axes[2,1].set_title('dir_binary', fontsize=15)
axes[2,1].axis('off')
通过以下几行:

# Plot the result
row, column = [3, 2]
figure, axes = plt.subplots(row, column, figsize=(15, 10))
figure.tight_layout()
list_title_image = [['Original Image',image],
                    ['Expected result', img_solution],
                    ['gradx', gradx],
                    ['grady', grady],
                    ['mag_binary', mag_binary],
                    ['dir_binary', dir_binary] ]

plot_it = [ ( ax.imshow(img[1], cmap='gray'), ax.set_title(img[0], fontsize=15), ax.axis('off') ) 
            for ax, img in zip(axes.flatten(), list_title_image)]

其中ax.axis('off')是matplotlib子批次的数组

我在评论中的列表理解建议可能不应该使用,因为这确实会像其他人指出的那样,用
填充列表

从您提供的答案中看到的额外代码可以看出,for循环可能是一种可行的方法,并且在IMO中更具可读性:

因此,请替换您的列表:

plot_it = [ ( ax.imshow(img[1], cmap='gray'), ax.set_title(img[0], fontsize=15), ax.axis('off') )
            for ax, img in zip(axes.flatten(), list_title_image)]
与:


它应该是一个直接的嵌套列表comp,但为什么要这样做?@mgilson,我需要它来避免将行*列乘以同一行代码:axis[I,j]。axis('off')。注意:axis('off')来自matplotlib.subplotA列表理解对此没有帮助,它不比简单的的递归更多或更少。从您问题的第一个版本开始,我认为您关闭了matplotlib子批次数组的axis。因此,您可以对axis.flatte()中的ax执行类似于
[ax.axis('off')的操作。
@DavidG是否
axis('off')
返回您以后可能要使用的值?如果不是,不要使用列表理解…如果这是你想要的,这是很好的,但我想知道为什么你想要一个没有的列表,只是为了语法变化。它只需要在一条线上吗?不需要。这只是为了减少行数以使代码更具可读性。但是,对于满是
None
s的列表,您将消耗更多的内存。不要这样做。列表理解产生一个值。一个
for
循环不起作用。写下你的意思。线路不缺。
for ax, img in zip(axes.flatten(), list_title_image):
    ax.imshow(img[1], cmap='gray')
    ax.set_title(img[0], fontsize=15)
    ax.axis('off')