老实说,我正在尝试做一些非常简单的事情,即从字符串列表中获取格式化的字符串,以使index+1
对齐到特定的长度,但在索引之后有一个句点,然后是字符串。
本质上是从列表['foo', 'bar', 'baz', 'quz']
转变成这样的人类友好表示形式:
1. foo
2. bar
3. baz
4. quz
现在我已完成以下操作:
names = ['foo', 'bar', 'baz', 'quz']
"\n".join(f"{f'{i}.':<5}{n}" for i, n in enumerate(names, 1)
虽然这确实可行,但我想知道是否有比嵌套内部f字符串更好的方法,因为我正在使用的项目列表大于10个项目,并且在索引不可用后填充了一段时间工作。
答案 0 :(得分:1)
您使用的语法很好,但是有些语法可能很难阅读。一种可能更清楚的方法是将字符串格式分成其自己的函数,如下所示:
def format_name(index, name):
return "{index:<5}{name}".format(index=f"{index}.", name=name)
这可以简化为单线,我认为这很好看:
>>> format_name = lambda i, name: "{0:<5}{1}".format(f"{i}.", name)
>>> "\n".join(format_name(i, n) for i, n in enumerate(names, 1))
1. foo
2. bar
3. baz
4. quz
答案 1 :(得分:1)
保持简单:
def ndot(n):
return f'{n}.'
for i in range(8, 12):
print(f'{ndot(i):<5}XX')
打印
8. XX
9. XX
10. XX
11. XX
将其应用于您的原始答案,如下所示:
'\n'.join(f'{ndot(i):<5}{nm}' for i, nm in enumerate(names, 1))