我有一个这种形式的字符串
s='arbit'
string='%s hello world %s hello world %s' %(s,s,s)
字符串中的所有%s具有相同的值(即s)。 有没有更好的写作方式? (而不是列出三次)
答案 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)
如果您使用的是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
实际上在映射方面更快。