Python单行print函数嵌套循环打印图案的语法错误及解决
解决你的Python单行代码语法错误与实现需求
首先咱们先拆解你原来代码里的问题:
- 列表推导式里多了个多余的逗号:
a, b, for这里最后那个逗号完全没必要,直接写a, b for就行 - 列表推导式的循环部分不能用冒号(那是普通for循环的写法),嵌套循环直接用
for ... for ...的连续写法就好 - 你用了
range(5)和range(3),这会生成0-4和0-2的数字,但你期望的输出是从1开始的,所以得调整range的起始值 - 最后你设置了
sep='\n',这会把每个元素换行打印,但你要的是一行空格分隔的结果,所以sep得改成' '
针对你要的输出1 1 1 2 1 3 1 4 2 1 2 2 2 3 2 4,对应的逻辑是:遍历a从1到2,每个a再遍历b从1到4,然后把每个a和b依次输出。
下面是两种可行的单行代码实现:
方法一:用列表推导式展开元素
print(*[x for a in range(1, 3) for b in range(1, 5) for x in (a, b)], sep=' ')
这个推导式的逻辑是:先循环a(1、2),再循环b(1-4),然后把每个(a,b)对里的元素逐个放进列表,最后用print(*...)把列表元素展开,用空格分隔打印。
方法二:用生成器表达式更高效(不用创建完整列表)
print(*(x for a in range(1, 3) for b in range(1, 5) for x in (a, b)), sep=' ')
和方法一逻辑一样,只是把列表推导式换成了生成器表达式,内存占用更低,适合数据量更大的场景。
如果你确实是想每行打印一个元素(最开始代码里的sep='\n'),只需要把上面代码里的sep=' '改回sep='\n'就行。
内容的提问来源于stack exchange,提问作者KittoMi
相关产品推荐
相关产品推荐

