2011-06-23 28 views
2

我知道,在Python這是可能的:單線可能嗎?

'\n'.join(alist) 

假設「ALIST」是一個網址列表,我可以輸出的HTML字符串,這將產生的href標籤的列表,這樣

東西
'<a href="'.join(alist) 

我知道上述錯誤,但我想知道是否有更聰明的方法來做到這一點。我做了以下與作品:

for u in adict[alist]: 
    fileHandle.write('<a href="' + u + '">' + u + '</a><br>')  

基本上,有沒有辦法以某種方式取代上述for循環與聯合聲明?也許是一條線?

+3

這是輸出HTML一個可怕的方式。例如,只要'u'包含雙引號或&符或尖括號就會中斷。使用模板系統,或者至少爲這些明顯的問題添加一些基本的驗證/轉義。 – delnan

回答

6

你正在尋找一個generator expression

''.join('<a href="' + u + '">' + u + '</a><br/>' for u in adict[alist]) 

如果你不想在最後一個項目後<br/>做,移動<br/>到字符串加入用。

此外,我在這裏假設adict[alist]包含HTML代碼。如果它包含文字,則必須用html.escape()(用&lt;"替換<&quot;)包裝u。否則,你會引入一個Cross-Site scripting漏洞(和渲染錯誤)。

+0

+1你可以用Python做任何事情! –

+2

'
'應該很可能是加入的字符串 – ThiefMaster

+0

@ThiefMaster添加了一個通知。 – phihag

1

fileHandler.write('<br/>\n'.join('<a href="%(url)s">%(url)s</a>' % {'url':u} for u in adict[alist]) 

編輯:修改爲使用寫入方法和使用換行符和「
」標籤

+0

'writelines'或''\ n'.join(..)'使用兩者都會在每個字符後產生一個換行符 – phihag

+0

但是我運行過這個代碼在本地多次,它會產生我正確的結果。所以我做錯了什麼? –

+0

哦,我的錯誤。'writelines'不會**添加換行符。但是,使用它仍然是多餘的,可能會帶來額外的開銷。此外,它混淆了你在做什麼;重新解釋一個字符串作爲一個序列並不明顯。爲什麼你更喜歡'writelines'而不是'write'? – phihag

1

如何下加入結果?

['<a href="{0}">{0}</a><br>'.format(u) for u in alist] 

更新:

fileHandler.write('<br />\n'.join('<a href="{0}">{0}</a>'.format(u) for u in alist) 
+0

+1使用新的字符串格式。你可能想要像phihag的答案中那樣添加一個join。 –