使用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 –