使用f-String格式的列表

3
我知道在f字符串格式{}中不能使用\n,但我正在尝试找出如何打印一行分隔的列表。 每个打印的数字应该有10个字符的宽度
# Output
#         12
#         28
#         45
#         47
#         52
#         71
#         95
#        122
#        164

我不被允许使用任何外部模块,比如 itertools 或 functools 来回答这个问题。

我已经尝试过了。

num_list = [12, 16, 17, 2, 5, 19, 24, 27, 42]
new_list = num_list.copy()
for n in range(1, len(new_list)):
    new_list[n] += new_list[n-1]

print(f'{*new_list:10f, sep = "\n"}')

你可以循环遍历这个列表吗? - Christian Sloper
你能给我们展示一个样例列表吗? - Errol
是的,我们可以使用循环,并且刚刚编辑了一个示例列表! - NeedHelp
1
print('\n'.join([f'{x:10f}' for x in new_list])) 这里并没有限制使用 \n,但是你把 print 的关键字参数和 f-string 语法搞混了。 - chepner
4个回答

2
尝试这个,它会在每个循环中打印一行,并使用.rjust()添加10个前导空格。
for n in range(1, len(new_list)):
    new_list[n] += new_list[n-1]

for num in new_list:
    print(f"{num}".rjust(10))

它之前是可以工作的,但现在没有打印出第一个数字(12)输出结果为: 28 45 47 52 71 95 122 164 - NeedHelp

2
谢谢@chepner!这个方法有效。
print('\n'.join([f'{x:10}' for x in new_list]))

1
如果您想坚持使用原来的f-string,只需在计算过程中逐步打印它。这也避免了对列表进行额外的迭代。
num_list = [12, 16, 17, 2, 5, 19, 24, 27, 42]
new_list = num_list.copy()

print(f'{new_list[0]:10}') # This gets you the first value

for n in range(1, len(new_list)):
    new_list[n] += new_list[n-1]
    print(f'{new_list[n]:10}') # This prints as you go

0

你可以使用str.join

print('\n'.join(f'{n}'.rjust(10) for n in  new_list))

或者使用内置函数print,并使用解包的生成器表达式和分隔符设置为\n

print(*(f'{n}'.rjust(10) for n in  new_list), sep='\n')

输出:

    12
    28
    45
    47
    52
    71
    95
   122
   164

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接