[英]How to use list (or tuple) as String Formatting value
假设这个变量:
s=['Python', 'rocks']
x = '%s %s' % (s[0], s[1])
现在我想替换更长的列表,并分别添加所有列表值,例如 s[0]、s[1]、... s[n],似乎不正确
引用自文档:
给定格式 % 值...如果格式需要单个参数,则值可能是单个非元组对象。 [4] 否则,values 必须是一个元组,其中的项目数与格式字符串指定的数量完全相同,或者是单个映射对象(例如,字典)。
我用元组和列表作为格式化程序尝试了很多组合但没有成功,所以我想在这里问
我希望很清楚
[编辑] 好吧,也许我不够清楚
我有大文本变量,比如
s = ['a', 'b', ..., 'z']
x = """some text block
%s
onother text block
%s
... end so on...
""" % (s[0], s[1], ... , s[26])
我想更紧凑地更改% (s[0], s[1], ... , s[26])
而不手动输入每个值
您不必拼出所有索引:
s = ['language', 'Python', 'rocks']
some_text = "There is a %s called %s which %s."
x = some_text % tuple(s)
当然,s 中的项数必须与格式字符串中的插入点数相同。
从 2.6 开始,您还可以使用新的format
方法,例如:
x = '{} {}'.format(*s)
建立在@yan 对较新 .format 方法的回答上,如果一个字典的键值超过一个,请使用带键的索引来访问不同的值。
>>> s = {'first':['python','really'], 'second':'rocks'}
>>> x = '{first[0]} --{first[1]}-- {second}'.format(**s)
>>> x
'python --really-- rocks'
注意:当您必须根据独立于 .format() 的键访问其中一个值时,它几乎没有什么不同,如下所示:
>>> value=s['first'][i]
有如何加入元组成员:
x = " ".join(YourTuple)
空格是你的元组成员分隔符
如果你想使用一个项目列表,你可以直接传递一个元组:
s = ['Python', 'rocks']
x = '%s %s' % tuple(s)
或者您可以使用字典提前列出您的列表:
s = {'first':'python', 'second':'rocks'}
x = '%(first)s %(second)s' % s
话不多说,给你看代码:
>>> tup = (10, 20, 30)
>>> lis = [100, 200, 300]
>>> num = 50
>>> print '%d %s'%(i,tup)
50 (10, 20, 30)
>>> print '%d %s'%(i,lis)
50 [100, 200, 300]
>>> print '%s'%(tup,)
(10, 20, 30)
>>> print '%s'%(lis,)
[100, 200, 300]
>>>
如果您真的想在格式中注入多达 26 个字符串,您可能需要考虑命名占位符。 否则,查看您代码的人将不知道s[17]
是什么。
fields = {
'username': 'Ghostly',
'website': 'Stack Overflow',
'reputation': 6129,
}
fmt = '''
Welcome back to {website}, {username}!
Your current reputation sits at {reputation}.
'''
output = fmt.format(**fields)
可以肯定的是,您可以继续使用列表并像Jochen Ritzel 的答案一样扩展它,但是对于更大的结构来说,这更难维护。 我只能想象使用 26 个{}
占位符会是什么样子。
fields = [
'Ghostly',
'Stack Overflow',
6129,
]
fmt = '''
Welcome back to {}, {}!
Your current reputation sits at {}.
'''
output = fmt.format(*fields)
我们可以使用带有列表名称的*
将list
转换为.format(...)
参数。 像这样: *mylist
请参阅以下代码:
mylist = ['Harry', 'Potter']
s = 'My last name is {1} and first name is {0}'.format(*mylist)
print(s)
输出:我的姓是波特,名字是哈利。
检查以下示例
列表示例
data = ["John", "Doe", 53.44]
format_string = "Hello"
print "Hello %s %s your current balance is %d$" % (data[0],data[1],data[2])
你好 John Doe 你目前的余额是 53 美元
元组示例
data = ("John", "Doe", 53.44)
format_string = "Hello"
print "Hello %s %s your current balance is %d$" % (data[0],data[1],data[2])
你好 John Doe 你目前的余额是 53 美元
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.