在Python3中,如何右对齐字符串而不计算字符串本身?

在Python3中,如何右对齐字符串而不计算字符串本身?,python,python-3.x,Python,Python 3.x,刚开始学习python。在我看来,rjust()方法是计算字符串,我试图证明长度的合理性 让我澄清一下,我用来研究python的书中有这样一种小程序: order = "First\nSecond\nThird" print("The order is: ", order) 其输出为: The order is: First Second Third 我想我能做些什么改变,使输出成为(所需输出) 也许有很简单的方法可以解决这个问题,但请记住我刚刚开始学习python。我试图格式化,但

刚开始学习python。在我看来,rjust()方法是计算字符串,我试图证明长度的合理性

让我澄清一下,我用来研究python的书中有这样一种小程序:

order = "First\nSecond\nThird"
print("The order is: ", order)
其输出为:

The order is: First  
Second  
Third
我想我能做些什么改变,使输出成为(所需输出

也许有很简单的方法可以解决这个问题,但请记住我刚刚开始学习python。我试图格式化,但没有用。在了解了列表之后,我提出了这个解决方案

order = "First\nSecond\nThird"

listed_order = order.split("\n")
length_of_list = len(listed_order)

print_line = "The order is: "
length = len(print_line)

print(print_line + listed_order[0])
for i in range(1, length_of_list):
    print(listed_order[i].rjust(length))
但结果是,

The order is: First
        Second
         Third
这意味着rjust()方法正在计算第二个和第三个,以使对齐长度为14,而我希望它们从14开始。第二个在它前面有8个空格,使其对齐长度为14,而第三个有9个空格

那么,我能做些什么来获得我想要的输出呢?如果有其他方法可以解决这个问题,请告诉我。

您描述的内容是左对齐的,但有一个额外的偏移量(也称为缩进)

而不是

print(listed_order[i].rjust(length))
干脆

print(' ' * length + listed_order[i])
如果[i]列示的
右侧没有任何内容,您也不需要使用
ljust


您可能想看看,它可以让您缩进整个文本块,而无需手动拆分行。

您不必执行以下操作:
length\u of\u list=len(列出的顺序)
。您可以在不检查列表长度的情况下运行循环:

for i in listed_order:
    print(i.rjust(length))
编辑: 正如评论中所指出的,这还将打印我们要跳过的第一个元素。您可以告诉python从第二个元素开始处理,方法是添加
[1://code>,这意味着从索引1的元素(索引0后的第二个元素)开始直到结束
,因此:

for i in listed_order[1:]:
    print(i.ljust(length))
现在谈谈核心问题

您需要的是空白的数量。您可以通过运行以下命令获得它:

number_of_whitespaces = len("The order is: ")
然后在每行之前打印出来:

print(' ' * number_of_whitespaces, end='')
完整解决方案如下:

#!/usr/bin/env python3

order = "First\nSecond\nThird"
print("The order is: ", order)

orders = order.split()
whitespaces = len('The order is: ')

print('The order is: {}'.format(orders[0]))
for o in orders[1:]:
    print(' ' * whitespaces, end='')
    print(o)
EDIT2:添加了缺少的冒号,将rjust更改为ljust
EDIT3:添加了完整的解决方案

如果我能做些什么来改进我的问题,请让我知道。您实际上想在给定的时间左对齐字符串position@schwobaseggl左辩护先生给出了第一个结果也许我误解了你的评论。你的方法几乎有效(也不是最简单的),您应该只使用
length=len(print\u line+listed\u order[0])
,因为这是您想要的行大小。@RamchandraGiri这就是我说“在给定位置”的原因。查看您要对齐的单词:它们是在左边对齐还是在右边对齐?
因为我按列出的顺序将遍历列表中的所有项目,但是必须排除第一个。@gonczor首先for语句缺少冒号,其次是我缺少了什么,因为这没有给出预期的输出。我添加了冒号。这并不是为了反反反间谍,我只是描述了一些你们可能会发现有用的机制。什么特别不起作用?先生,您需要将rjust更改为ljust以提供预期的输出,否则一切都很好。谢谢,不客气。我还上传了此任务的完整解决方案。以防万一。
#!/usr/bin/env python3

order = "First\nSecond\nThird"
print("The order is: ", order)

orders = order.split()
whitespaces = len('The order is: ')

print('The order is: {}'.format(orders[0]))
for o in orders[1:]:
    print(' ' * whitespaces, end='')
    print(o)