【问题标题】:Nested for loop inside print function to print a specific pattern in python在打印函数中嵌套for循环以在python中打印特定模式
【发布时间】:2020-03-09 09:26:18
【问题描述】:

我正在使用以下单行 python 代码打印出我在底部显示的特定模式。

我的代码:

print(*[a, b, for a in range(5): for b in range(3)], sep='\n')

执行上述代码后,我收到了一个invalid syntax 错误,但在那里我找不到任何语法错误。

错误:

Getting error : SyntaxError: invalid syntax  

我想要的输出如下:

1 1  
1 2  
1 3  
1 4  
2 1  
2 2  
2 3  
2 4

如何在一行代码中打印此模式?

感谢您的帮助。

【问题讨论】:

  • 到目前为止,答案只提供解决方案,不提供解释。所以:为什么会出现语法错误? 列表理解不允许 1) 元组没有括号(因为人类可能会错误地解释逗号),2) 逗号和冒号出现在奇怪的地方(for 之前/之后, 这里:b 和 for 之间的逗号,两个 fors 之间的冒号)。这将使它:print(*[(a, b) for a in range(5) for b in range(3)], sep='\n') 当然,这只能解决错误,而不是格式 - 但其他人已经解释了字符串格式。 :)

标签: python for-loop printing


【解决方案1】:

去:

print(*[f'{a} {b}' for a in range(5) for b in range(3)], sep='\n')

0 0

0 1

0 2

1 0

1 1

1 2

...

【讨论】:

  • f'{a} {b}' 你能详细说明一下这些部分吗?
  • @KittoMi 这是一个python f-string,这就像一个字符串,但是放在{}之间的所有东西都会被评估,例如print(f'1+2={1 + 2}') 打印 '1+2=3'
  • *f-strings 是在 Python 3.6 中引入的,而不是 3.7
【解决方案2】:

其他答案没有考虑到的另一件事是,为了获得您正在寻找的模式,范围应该从 1 开始,并且 a 和 b 应该改变位置。

print(*["{} {}".format(a,b) for a in range(1, 3) for b in range(1, 5)], sep='\n')

【讨论】:

  • 列表推导用于创建列表。不是为了迭代打印调用。
  • 你是对的。我编辑了答案。无论如何它都可以,但是这样更干净。
【解决方案3】:

您在列表理解中犯了两个语法错误

在列表推导中,for 循环不是表达式,因此您不必写冒号:

您想在列表推导中存储一个字符串。列表推导式存储的表达式不是打印函数的一部分。有多种构造字符串的方法。在这种情况下,f-strings 是一个很好的解决方案。

正确的语法是

print(*[f"{a} {b}") for a in range(5) for b in range(3)], sep='\n')

如果列表理解变得太长,我倾向于将其拆分为多行。

data = [
    f"{a} {b}"
    for a in range(5)
    for b in range(3)
]
print(*data, sep="\n")

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2020-02-04
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2021-02-14
    相关资源
    最近更新 更多