如何使用list(或tuple)作为String Formatting值

时间:2011-03-14 14:16:06

标签: python string

假设这个变量:

s=['Python', 'rocks']
x = '%s %s' % (s[0], s[1])

现在我想替换更长的列表,并单独添加所有列表值,如s [0],s [1],... s [n],似乎不正确

来自文档:

  

给定格式%值...如果是格式   需要一个参数,值可以   是一个非元组对象。 [4]   否则,值必须是元组   确切地说是指定的项目数   通过格式字符串或单个字符串   映射对象(例如,a   字典)。

我尝试使用元组和列表作为格式化程序的许多组合但没有成功,所以我想在这里问一下

我希望它很清楚

[编辑] 好吧,也许我不够清楚

我有大文本变量,比如

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])而不用手动输入每个值

8 个答案:

答案 0 :(得分:38)

您不必拼写所有索引:

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)

答案 1 :(得分:2)

建立@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]

答案 2 :(得分:1)

如何加入元组成员:

x = " ".join(YourTuple)

Space是你的元组成员分隔符

答案 3 :(得分:1)

如果你想使用一个项目列表,你可以直接传递一个元组:

s = ['Python', 'rocks']
x = '%s %s' % tuple(s)

或者你可以使用字典来制作你的清单:

s = {'first':'python', 'second':'rocks'}
x = '%(first)s %(second)s' % s

答案 4 :(得分:0)

谈话很便宜,告诉你代码:

>>> 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]
>>> 

答案 5 :(得分:0)

如果您认真考虑在格式中注入多达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's answer,那样展开它,但对于较大的结构来说,维护起来比较困难。我只能想象26个{}占位符会是什么样子。

fields = [
    'Ghostly',
    'Stack Overflow',
    6129,
]

fmt = '''
Welcome back to {}, {}!
Your current reputation sits at {}.
'''

output = fmt.format(*fields)

答案 6 :(得分:0)

我们可以使用带有列表名称的 Secret Access Keylist 转换为 .format(...) 的参数。像这样:*

查看以下代码:

*mylist

输出:我的姓是波特,名字是哈利。

答案 7 :(得分:-1)

检查以下示例

列出示例

data = ["John", "Doe", 53.44]
format_string = "Hello"

print "Hello %s %s your current balance is %d$" % (data[0],data[1],data[2])
  

你好约翰·多,你当前的余额是53美元

元组示例

data = ("John", "Doe", 53.44)
format_string = "Hello"

print "Hello %s %s your current balance is %d$" % (data[0],data[1],data[2])
  

你好约翰·多,你当前的余额是53美元