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

Python 如何根据任意数量的参数使字符串动态?,python,arrays,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}和参数[7]时,如果引号只有4个参数(总共7个参数),我会得到一个索引器 短暂性脑缺血发作 已更新,但末尾没有额外的空间: str = '{}

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

尤其是此返回字符串:

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}
参数[7]
时,如果引号只有4个参数(总共7个参数),我会得到一个
索引器

短暂性脑缺血发作

已更新,但末尾没有额外的空间:

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]
是第二个参数。。。。然后他们将用它的值填充那些
{}

print '{0} "{1}"'.format(' '.join(params[:3]), ' '.join(params[3:]))
但我建议你不要把这件事放在一行上。分别制作两个独立的零件,然后通过
.format
组装。 这将更具可读性(甚至变量名也会记录您的代码),并且更易于以后维护

一种方法是使用字典:

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

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

以下内容看起来有点简单,但很有效:

#!/bin/python
params = [1, 2, 3]
mystr = '%s ' * len(params) % tuple(params)
。。。虽然它有一个尾随空格。为了摆脱这种状况,你可以用一些更丑陋的东西,比如:

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

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

这会在第二个双引号之前产生额外的空间。使用
“”。加入
以避免它。有关此代码的功能和工作方式的说明?谢谢,但它会给出此错误:中的字段名长度为零format@SamRoberts你能在两行中完成它是什么意思?添加了更详细的示例。我不知道你的代码中数据的含义是什么,但你应该使用更具描述性的
quoted\u part
等。此外,如果答案适合你,你应该接受它,这样其他人知道它解决了你的问题。我想我应该提一下,你可以构建一个“模板”任何长度小于参数长度的字符串,并使用切片仅提供其项的所需子序列。这应该是显而易见的;现在还不清楚这对于您的用例是否是必要的。
mystr = ('%s ' * (len(params)-1) + "%s") % tuple(params)