You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python列表推导式实现空心正方形的正确打印?

如何用列表推导式实现多行空心正方形输出?

我懂你遇到的问题——原来的嵌套循环靠外层循环结束时的print()来换行,但你写的列表推导式把所有字符都塞进了一个一维列表,打印的时候自然就挤成一行了。咱们来调整一下列表推导式的结构,就能解决这个问题。

核心思路:按行生成完整字符串

我们可以让列表推导式先生成每一行的完整字符串,而不是所有零散的字符。具体来说,外层遍历行号i,内层遍历该行的每个列号j,把一行的字符拼接成一个字符串,最后用换行符把所有行串起来打印。

修改后的代码如下:

side = int(input())
# 外层生成每行的字符串,内层生成该行的每个字符
square = [''.join(['*' if (i == 0 or i == side - 1 or j == 0 or j == side - 1) else ' ' for j in range(side)]) for i in range(side)]
# 用换行符连接所有行并打印
print('\n'.join(square))

更简洁的写法(可选)

如果你想少写一层嵌套,也可以在生成字符的时候,每一行的末尾额外添加一个换行符,这样最后直接拼接所有字符就行:

side = int(input())
square = ['*' if (i == 0 or i == side - 1 or j == 0 or j == side - 1) else ' ' for i in range(side) for j in range(side)]
# 手动插入换行符:每side个字符后加一个换行
square_with_newlines = []
for idx, char in enumerate(square):
    square_with_newlines.append(char)
    if (idx + 1) % side == 0:
        square_with_newlines.append('\n')
print(''.join(square_with_newlines))

不过第一种按行生成字符串的方式可读性更高,也更符合列表推导式的简洁风格。

内容的提问来源于stack exchange,提问作者user4516038

火山引擎 最新活动