2014-11-23 51 views
0

如何根據任意數量的參數製作動態字符串?如何根據任意數量的參數製作動態字符串?

尤其是這個返回的字符串:

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]我得到一個IndexError如果只有4個參數爲報價(共7個參數)。

TIA

回答

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]是第二個參數....然後他們將填充它們的值{}

+0

這會在第二個雙引號之前產生額外的空間。使用'''.join'來避免它。 – 2014-11-23 01:10:39

+0

關於此代碼的作用以及它如何工作的解釋? – 2014-11-23 01:28:49

+0

謝謝,但它給出了這個錯誤:格式爲 – 2014-11-23 01:36:08

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命令的安全方式或數據庫查詢!

+0

謝謝!這有效,但我怎樣才能做到兩行呢? – 2014-11-23 01:38:50

+0

@SamRoberts你能說兩行就能做什麼? – RedX 2014-11-23 10:29:50

+0

添加了更詳細的示例。我不知道你的代碼中數據的含義是什麼,但是你應該使用一些更具描述性的內容,比如'quoted_pa​​rt'等。 另外,如果答案適合你,你應該接受它,所以其他人知道它解決了你的問題。 – 2014-11-24 00:19:15

0

下似乎有點簡單,但工作原理:

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

...但它確實有一個尾隨空格。爲了擺脫,你可以使用的東西,有點像難看:

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

這假定老式插值是足夠的,並且不需要由.format提供的任何特殊功能()方法。

+0

我想我應該提到你可以建立一個長度小於參數長度的「模板」字符串,並使用一個切片來提供其所需項目的子序列。這應該是顯而易見的;目前尚不清楚這對您的用例是否有必要。 – 2014-11-23 10:46:30

相關問題