【问题标题】:How to trim spaces in an f-string?如何修剪 f 字符串中的空格?
【发布时间】:2021-05-20 22:20:25
【问题描述】:

我有一个字符串,我正在使用 f-string 格式化和打印,我需要消除一些空格。这是我的代码:

if len(probably) > 0 and len(might) > 0:  
       print(f'{name}:',f'Might({might})', f'Probably({probably})')
    elif len(probably) == 0 and len(might) > 0:  
       print(f'{name}:',f'Might({might})')
    elif len(probably) > 0 and len(might) == 0:
       print(f'{name}:',f'Probably({probably})')
    elif len(probably) == 0 and len(might) == 0:
       print(f'{name}:')

这是目前的样子:

1: Might(4, 6, 7) Probably(11)
2: Might(5, 8, 10) Probably(9)
3: Might(4, 5, 6, 7, 8, 12)
4: Might(1, 3, 6, 11, 12)
5: Might(2, 3, 8, 10) Probably(9)
6: Might(1, 3, 4, 7, 11)
7: Might(1, 3, 6)
8: Might(2, 3, 5, 9, 10)
9: Might(8, 10) Probably(2, 5)
10: Might(2, 5, 8, 9)
11: Might(4, 6) Probably(1)
12: Might(3, 4)
13:

这就是我想要的样子

    1:Might(4,6,7) Probably(11)
    2:Might(5,8,10) Probably(9)
    3:Might(4,5,6,7,8,12)
    4:Might(1,3,6,11,12)
    5:Might(2,3,8,10) Probably(9)
    6:Might(1,3,4,7,11)
    7:Might(1,3,6)
    8:Might(2,3,5,9,10)
    9:Might(8,10) Probably(2,5)
    10:Might(2,5,8,9)
    11:Might(4,6) Probably(1)
    12:Might(3,4)
    13:

【问题讨论】:

  • mightprobably 是什么类型?列表?
  • 我认为你改变了预期的格式@martineau
  • @astrochun:我只编辑了问题的标题——所以这不可能是真的。
  • “修剪空格”在哪里?到处?在末端?目前还不清楚您的预期/实际结果发生了什么。 f 字符串在一天结束时仍然只是一个字符串:从字符串的两端 strip 空格:str.strip().
  • @astrochun:我不知道也没有触及 OP 问题的主体——所以建议你让 他们 澄清一下。

标签: python f-string


【解决方案1】:

一个 f 字符串在一天结束时仍然只是一个字符串:

>>> x = "hello"
>>> print(f"    {x}    ".strip())
hello

但是,由于数字和每行上的 Might 之间的间距似乎不一致,您希望输出的样子并不十分清楚:

3: Might(4,5,6,7,8,12)
4:Might(1,3,6,11,12)

为什么一个有空格而另一个没有?补充一点:您可以利用对象的真实性并简化您的 if 语句:

if probably and might:  
    print(f'{name}:', f'Might({might})', f'Probably({probably})')
elif not probably and might:  
    print(f'{name}:', f'Might({might})')
elif probably and not might:
    print(f'{name}:', f'Probably({probably})')
elif not probably and not might:
    print(f'{name}:')

如果你想对真实性感到疯狂,你可以完全摆脱 if 语句:

print(f"{name}:", f"Might({might})"*bool(might), f"Probably({probably})"*bool(probably))

编辑

由于您已通过评论添加了一些上下文,因此您可以执行以下操作:

# Get rid of spaces between numbers
might_str = ",".join(map(str, might))
prob_str = ",".join(map(str, probably))

if probably and might:  
    print(f'    {name}:Might({might_str}) Probably({probably_str})')
elif not probably and might:  
    print(f'    {name}:Might({might_str})')
elif probably and not might:
    print(f'    {name}:Probably({probably_str})')
elif not probably and not might:
    print(f'    {name}:')

一些输出,包括您在“预期输出”中的前导空格:

    1:Might(1,2,3,4,5) Probably(5,6,2,3,1)
    2:Probably(5,6,2,3,1)
    3:Might(1,2,3,4,5)
    4:

【讨论】:

  • 我认为"".join(might) 不会完全起作用。他想要逗号之间。但请记住,如果 might 是 int 列表而不是 str 列表,这将不起作用。
  • 您看到空格的原因是print(a, b, c) 默认情况下会在打印的每个值 a、b 和 c 之间放置一个空格。你可以通过摆弄print() 函数的关键字参数来解决这个问题,或者,你可以只使用一个 f 字符串来做你想做的事情。
猜你喜欢
  • 2010-09-16
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
相关资源
最近更新 更多