2011-03-14 59 views
9

假設這個變量:如何使用列表(或元組)作爲字符串格式化值

s=['Python', 'rocks'] 
x = '%s %s' % (s[0], s[1]) 

現在我想替代更長列表中,並分別將所有列表中的值,如S [0],S [1],... S [N],看起來不正確

引用從文檔:

鑑於格式%的值...如果格式需要 一個參數,值可以 是單個非元組obj等。 [4] 否則,值必須是格式字符串或 映射對象(例如, 字典)指定的 項目的數目。

我試着用元組和列表的格式化但沒有成功多種組合,所以我想在這裏提出

我希望這是明確

[編輯] OK,也許我並不清楚足夠

我有很大的文本變量,像

s = ['a', 'b', ..., 'z'] 

x = """some text block 
      %s 
      onother text block 
      %s 
      ... end so on... 
      """ % (s[0], s[1], ... , s[26]) 

我禾ULD想改變% (s[0], s[1], ... , s[26])更加緊湊,而無需手動輸入每個值

回答

28

你不必拼出所有索引:

s = ['language', 'Python', 'rocks'] 
some_text = "There is a %s called %s which %s." 
x = some_text % tuple(s) 

s中的項目數必須與當然格式字符串中的插入點數相同。

自2。6,你也可以使用新的format方法,例如:

x = '{} {}'.format(*s) 
+0

啊,'元組(S)'...謝謝。這解決的情況下 – Ghostly 2011-03-14 14:28:40

+1

隨着''%操作者在Python 3被棄用,你應該開始使用'format'方法代替:'X = 「{0} {1}」 格式(* S)'。當然,'join'在這種情況下是更好的解決方案.. – 2011-03-14 14:30:35

0

還有就是如何加入成員的元組:

x = " ".join(YourTuple) 

空間是你的元組成員分離器

1

如果你想使用的物品的列表,你可以直接傳遞一個元組:

s = ['Python', 'rocks'] 
x = '%s %s' % tuple(s) 

或者你可以使用一個字典,讓您的列表前面:

s = {'first':'python', 'second':'rocks'} 
x = '%(first)s %(second)s' % s 
-1

檢查下面的例子

列表示例

data = ["John", "Doe", 53.44] 
format_string = "Hello" 

print "Hello %s %s your current balance is %d$" % (data[0],data[1],data[2]) 

John Doe:您好您的目前餘額是53 $

元組例如

data = ("John", "Doe", 53.44) 
format_string = "Hello" 

print "Hello %s %s your current balance is %d$" % (data[0],data[1],data[2]) 

John Doe:您好您的當前餘額爲$ 53

1

上@yan的回答建立了新的.format方法,如果一個人有一個鍵有多個值的字典,使用索引,以訪問不同的值的關鍵。

>>> s = {'first':['python','really'], 'second':'rocks'} 
>>> x = '{first[0]} --{first[1]}-- {second}'.format(**s) 
>>> x 
'python --really-- rocks' 

注意:它小的時候,你必須訪問的一個值對.format()的一個主要的獨立,這是這樣的不同:

>>> value=s['first'][i] 
0

談話是便宜的,告訴你的代碼:

>>> tup = (10, 20, 30) 
>>> lis = [100, 200, 300] 
>>> num = 50 
>>> print '%d  %s'%(i,tup) 
50  (10, 20, 30) 
>>> print '%d  %s'%(i,lis) 
50  [100, 200, 300] 
>>> print '%s'%(tup,) 
(10, 20, 30) 
>>> print '%s'%(lis,) 
[100, 200, 300] 
>>> 
0

如果您認真對待在您的格式中插入多達26個字符串,您可能需要考慮命名佔位符。否則,別人看你的代碼將不知道什麼s[17]是。

fields = { 
    'username': 'Ghostly', 
    'website': 'Stack Overflow', 
    'reputation': 6129, 
} 

fmt = ''' 
Welcome back to {website}, {username}! 
Your current reputation sits at {reputation}. 
''' 

output = fmt.format(**fields) 

可以肯定的,你可以繼續使用清單,並擴大它喜歡的Jochen Ritzel's answer,結束,但是這是很難保持較大的結構。我只能想象它是什麼樣子與{}佔位符26。

fields = [ 
    'Ghostly', 
    'Stack Overflow', 
    6129, 
] 

fmt = ''' 
Welcome back to {}, {}! 
Your current reputation sits at {}. 
''' 

output = fmt.format(*fields) 
相關問題