格式化字符串时多次插入相同的值

时间:2009-08-04 03:42:20

标签: python string format

我有一个这种形式的字符串

s='arbit'
string='%s hello world %s hello world %s' %(s,s,s)

字符串中的所有%s具有相同的值(即s)。 有没有更好的写作方式? (而不是列出三次)

6 个答案:

答案 0 :(得分:183)

您可以使用Python {2.6和Python 3.x中提供的advanced string formatting

incoming = 'arbit'
result = '{0} hello world {0} hello world {0}'.format(incoming)

答案 1 :(得分:38)

incoming = 'arbit'
result = '%(s)s hello world %(s)s hello world %(s)s' % {'s': incoming}

您可能希望阅读本文以获得理解:String Formatting Operations

答案 2 :(得分:14)

您可以使用字典类型的格式:

s='arbit'
string='%(key)s hello world %(key)s hello world %(key)s' % {'key': s,}

答案 3 :(得分:12)

取决于你的意思更好。如果您的目标是删除冗余,则此方法有效。

s='foo'
string='%s bar baz %s bar baz %s bar baz' % (3*(s,))

答案 4 :(得分:3)

>>> s1 ='arbit'
>>> s2 = 'hello world '.join( [s]*3 )
>>> print s2
arbit hello world arbit hello world arbit

答案 5 :(得分:1)

Fstrings

如果您使用的是Python 3.6+,则可以使用新的所谓f-strings代表格式化字符串,可以通过在开头添加字符f来使用它。字符串以将其标识为f-string

price = 123
name = "Jerry"
print(f"{name}!!, {price} is much, isn't {price} a lot? {name}!")
>Jerry!!, 123 is much, isn't 123 a lot? Jerry!
  

使用f-string的主要好处是它们更具可读性,更快,并提供更好的性能:

每个人的源大熊猫:Python数据分析,作者Daniel Y. Chen

基准

毫无疑问,新的f-strings更具可读性,因为您不必重新映射字符串,但它是否更快,尽管如上述引用中所述?

price = 123
name = "Jerry"

def new():
    x = f"{name}!!, {price} is much, isn't {price} a lot? {name}!"


def old():
    x = "{1}!!, {0} is much, isn't {0} a lot? {1}!".format(price, name)

import timeit
print(timeit.timeit('new()', setup='from __main__ import new', number=10**7))
print(timeit.timeit('old()', setup='from __main__ import old', number=10**7))
> 3.8741058271543776  #new
> 5.861819514350163   #old

运行1000万次测试似乎新的f-strings实际上在映射方面更快。