如何根据任意数量的参数使字符串动态化?

时间:2014-11-23 00:32:05

标签: python arrays

如何根据任意数量的参数使字符串动态化?

特别是这个返回字符串:

return '{0} {1} {2} "{3} {4} {5} {6}"'.format(params[0], params[1], params[2], params[3], params[4], params[5], params[6])

它需要能够处理引号之间的4到7个参数,当我添加{7}params[7]时,如果只有4个参数,我会得到IndexError引号(总共7个参数)。

TIA

3 个答案:

答案 0 :(得分:1)

print '{0} "{1}"'.format(' '.join(params[:3]), ' '.join(params[3:]))

但我会建议你不要试图坚持使用oneliner。分别制作两个不同的部分,然后通过.format进行汇编。 这将更具可读性(甚至变量名称记录您的代码),以后更容易维护。

一种方法是使用字典:

data = {
    'first_part' : ' '.join(params[:3]),
    'quoted_part': ' '.join(params[3:])
}
print '{first_part} "{quoted_part}"'.format(**data)

如果你想在屏幕上打印这些东西,这很有效。请记住,这不是组装shell命令或数据库查询的安全方法!

答案 1 :(得分:0)

str = '{} {} {} " ' + '{} '*(len(params)-3) +'"'
return str.format(*params)

更新后没有额外的空格:

str = '{} {} {} "'  + ' '.join(['{}']*(len(params)-3)) +'"'
return str.format(*params)

>>>params=[1,2,3,4,5,6,7]

输出

'1 2 3 "4 5 6 7"'

' '.join(['{}']*(len(params)-3))创建一个'{}'字符串,len(params)-3决定它们的数量。

*params表示一组参数。在这里,它将把参数解包成一组参数。 param[0]是第一个参数,param[1]是第二个参数....然后他们会用{}填充其值。

答案 2 :(得分:0)

以下似乎有点简单但有效:

#!/bin/python
params = [1, 2, 3]
mystr = '%s ' * len(params) % tuple(params)

......虽然它确实有一个尾随空格。要摆脱它,你可以使用一些有点丑陋的东西:

mystr = ('%s ' * (len(params)-1) + "%s") % tuple(params)

这假设旧的插值已足够,并且您不需要 .format()方法提供的任何特殊功能。