使用Matlab一段时间后,我越来越喜欢它的sprintf
函数,这是矢量化(矢量化是问题的关键部分)。Matlab的矢量化sprintf像python函数
假设一个具有列表li=[1,2,3,4,5,6]
,
sprintf("%d %d %d\n", li)
将适用的格式上的元素在li
彼此返回
"1 2 3\n4 5 6\n"
为字符串之后。
我目前的解决方案不罢工很Python的:
def my_sprintf(formatstr, args):
#number of arguments for format string:
n=formatstr.count('%')
res=""
#if there are k*n+m elements in the list, leave the last m out
for i in range(n,len(args)+1,n):
res+=formatstr%tuple(args[i-n:i])
return res
什么是在Python做它的通常/更好的办法?
有没有可能,但没有明确的格式字符串(n=formatstr.count('%')
感觉就像一个黑客)引发预期参数的数量?
PS:为了简单起见可以假设的是,在该列表中的元素的数量是在格式字符串参数数量的倍数。
你必须使用一个格式字符串? –
@Padraic坎宁安:没有,用的String.Format)的新版本(也未尝不可。 – ead
如果你想要一个强大的解决方案,我会倾向于将逻辑封装在一个类中,子类string.Formatter –