2011-11-03 112 views
4

我是Python新手,來自Java背景。我想知道寫這個代碼的最Python的方式:將字符串列表追加到數組的Python方法

entry_list = [] 
for entry in feed.entry: 
    entry_list.append(entry.title.text) 

基本上是在飼料中每一個元素,我想該元素的標題添加到列表中。

我不知道我是否應該使用地圖()或lambda函數或什麼...

感謝

+0

http://docs.python.org/howto/functional.html - 快樂編碼。 – 2011-11-03 04:24:26

+0

@pst根本沒有任何幫助。我知道如何以多種方式編寫代碼,我正在尋求其他人的建議,以獲得最佳方式。 – Cuga

+0

我可以發誓,它涵蓋了以下所有方法 - 特別是列表解析;-) – 2011-11-05 18:05:50

回答

8

最Python的代碼,我能想到的:

entry_list = [entry.title.text for entry in feed.entry] 

這是一個list comprehension這將構建一個新的列表出feed.entry.title.text元素。

要追加,你需要做的事:

entry_list.extend([entry.title.text for entry in feed.entry]) 

作爲一個側面說明,在做擴展業務時,常快generator expression比列表理解慢得多。

+0

列表理解。列表構造函數是'list()'。 –

+0

derp,謝謝你,我的錯誤。 – Serdalis

+0

非常感謝! – Cuga

4

隨着GENEX的權謀禮貌的一點點。

entry_list.extend(x.title.text for x in feed.entry) 

或者只是一個LC,如果你不需要保持相同的列表。

entry_list = [x.title.text for x in feed.entry] 
+0

出於某種原因,列表推導比'extend'功能的生成器序列更快。 – Serdalis

+2

有道理。使用LC可以一次性重新分配列表,而對於一個genex,它必須重新分配每個已產生的值。 –

+0

謝謝,我忘了列表理解 – Cuga

3

始終使用列表理解爲簡潔的表達式。

entry_list = [entry.title.text for entry in feed.entry] 

如果所有要與entry_list要做的就是再次遍歷它,你可以使用發電機表達

entry_list = (entry.title.text for entry in feed.entry) 

注意,唯一的區別是使用括號。當使用生成器格式時,entry_list沒有被填充並且可以保存內存。您將仍然能夠做的事情一樣

for items in entry_list: 
    do something 

''.join(entry_list) 
+0

也很好,讓我知道。謝謝! – Cuga