Python “a”中的多行打印;至于;环
我正在尝试在“for”循环中打印多行字符串。问题是我想把输出打印在同一行上。例如:Python “a”中的多行打印;至于;环,python,python-3.x,Python,Python 3.x,我正在尝试在“for”循环中打印多行字符串。问题是我想把输出打印在同一行上。例如: for i in range(5): print(''' {a} | {b} '''.format(a=i,b=i+1)) 输出如下所示: 0 | 1 1 | 2 2 | 3 3 | 4 4 | 5 相反,我希望它是: 0 1 2 3 4 | | | | | 1 2 3 4 5 但我不知道怎么做。谢谢您的帮助。您一次只能打印一行。因此,首先必须打印包含所有a元素的行,然后打印包含所有条的行
for i in range(5):
print('''
{a}
|
{b}
'''.format(a=i,b=i+1))
输出如下所示:
0
|
1
1
|
2
2
|
3
3
|
4
4
|
5
相反,我希望它是:
0 1 2 3 4
| | | | |
1 2 3 4 5
但我不知道怎么做。谢谢您的帮助。您一次只能打印一行。因此,首先必须打印包含所有
a
元素的行,然后打印包含所有条的行,最后打印包含所有b
元素的行
在打印之前,先准备好每一行,这样做会更容易:
line_1 = ""
line_2 = ""
line_3 = ""
for i in range(5):
line_1 += str(i)
line_2 += "|"
line_3 += str(i+1)
print(line_1)
print(line_2)
print(line_3)
当然,有许多方法具有相同的基本思想。我选了一个初学者最容易理解的
我没有考虑间距,一旦考虑到了间距,使用列表会很有好处:
line_1_elements = []
line_2_elements = []
line_3_elements = []
for i in range(5):
line_1_elements.append(str(i))
line_2_elements.append("|")
line_3_elements.append(str(i+1))
print(" ".join(line_1_elements))
print(" ".join(line_2_elements))
print(" ".join(line_3_elements))
一次只能打印一行。因此,首先必须打印包含所有
a
元素的行,然后打印包含所有条的行,最后打印包含所有b
元素的行
在打印之前,先准备好每一行,这样做会更容易:
line_1 = ""
line_2 = ""
line_3 = ""
for i in range(5):
line_1 += str(i)
line_2 += "|"
line_3 += str(i+1)
print(line_1)
print(line_2)
print(line_3)
当然,有许多方法具有相同的基本思想。我选了一个初学者最容易理解的
我没有考虑间距,一旦考虑到了间距,使用列表会很有好处:
line_1_elements = []
line_2_elements = []
line_3_elements = []
for i in range(5):
line_1_elements.append(str(i))
line_2_elements.append("|")
line_3_elements.append(str(i+1))
print(" ".join(line_1_elements))
print(" ".join(line_2_elements))
print(" ".join(line_3_elements))
您需要sys.stdout.write
才能在不使用\n
的情况下进行写入。如果范围大于9,则此代码将不起作用(10+有2+个字符,因此在|
之前需要特殊的空格规则)
您需要
sys.stdout.write
才能在不使用\n
的情况下进行写入。如果您的范围大于9(10+有2+个字符,因此在|
之前需要特殊的空格规则),则此代码将不起作用。请尝试使用list concaternation:
x = 5
print (" ".join(str(i) for i in range(x)))
print ('| '*x)
print (" ".join(str(i) for i in range(1,x+1)))
尝试使用列表连接:
x = 5
print (" ".join(str(i) for i in range(x)))
print ('| '*x)
print (" ".join(str(i) for i in range(1,x+1)))
只是想说一句有趣的话(但糟糕的是,不要这样做)回答:
这使用终端控制代码逐列打印,而不是逐行打印。这里没有什么用处,但当你想做更奇怪的终端操作时,需要了解一些有用的信息。只是想说点有趣的事(但糟糕的是,不要这么做)回答:
这使用终端控制代码逐列打印,而不是逐行打印。这里没有什么用处,但当你想进行更奇怪的终端操作时,需要了解一些有用的信息。与Tim的解决方案类似,只是使用了genrators而不是genrators,我认为在这种情况下,genrators更具可读性:
print(" ".join(map(str, range(i))))
print("| " * i)
print(" ".join(map(str, range(1, i+1))))
或者,也可以选择可读性较低且更复杂的、基于zip
的方法:
def multi(obj):
print("\n".join(" ".join(item) for item in obj))
r = range(6)
multi(zip(*("{}|{}".format(a, b) for a, b in zip(r, r[1:]))))
与Tim的解决方案类似,只需使用而不是genrators,我认为在本例中更具可读性:
print(" ".join(map(str, range(i))))
print("| " * i)
print(" ".join(map(str, range(1, i+1))))
或者,也可以选择可读性较低且更复杂的、基于zip
的方法:
def multi(obj):
print("\n".join(" ".join(item) for item in obj))
r = range(6)
multi(zip(*("{}|{}".format(a, b) for a, b in zip(r, r[1:]))))
你的目标是什么?例如,如果您打印到n>9,您的格式将因为两位数而混乱 不管怎样,我会这样做。您只需要迭代一次,这非常灵活,因此可以轻松更改格式
lines = ['', '', '']
for i in range (5):
lines[0] += '%d ' % i
lines[1] += '| '
lines[2] += '%d ' % (i+1)
for line in lines:
print line
你的目标是什么?例如,如果您打印到n>9,您的格式将因为两位数而混乱 不管怎样,我会这样做。您只需要迭代一次,这非常灵活,因此可以轻松更改格式
lines = ['', '', '']
for i in range (5):
lines[0] += '%d ' % i
lines[1] += '| '
lines[2] += '%d ' % (i+1)
for line in lines:
print line
也许这会有所帮助:
sys.stdout.write('|'+''*(len(str(i+1))-1))
在Python3中,没有理由为此使用sys.stdout.write()。只需在侧注上执行print(i,end=“”)
@ThijsvanDien,您还可以使用从uuu future_uuu导入print_u函数导入Py2中的print函数
这可能会有所帮助:sys.stdout.write('.''''+'*(len(str(i+1))-1))
在Python 3中,没有理由为此使用sys.stdout.write()
。只需在侧注上执行print(i,end=“”)
@ThijsvanDien,您还可以使用从uuu future_uuu导入Py2中的打印功能。导入打印功能
+1我觉得这是最具Python风格的。不过我想把列表理解转换成生成器表达式。str.join可以接受任何iterable。@DavisYoshida我以前没有遇到过生成器表达式-这只是使用'.join(范围(x))
?@Tim否。但是您可以省略[]
括号,这样可以节省一些内存,因为您避免构建中间列表:“”。join(str(I)表示范围(x)内的I)
@schwobasegllstr.join
在构建输出字符串之前,将惰性生成器的整个输出读取到内存中。所以这并没有帮你省那么多钱。+1我觉得这是最有吸引力的。不过我想把列表理解转换成生成器表达式。str.join可以接受任何iterable。@DavisYoshida我以前没有遇到过生成器表达式-这只是使用'.join(范围(x))
?@Tim否。但是您可以省略[]
括号,这样可以节省一些内存,因为您避免构建中间列表:“”。join(str(I)表示范围(x)内的I)
@schwobasegllstr.join
在构建输出字符串之前,将惰性生成器的整个输出读取到内存中。所以它不会帮你省那么多钱。