2012-08-22 30 views
0

這是我的代碼列表解析,並列出清單列表連接

[temp.append(i.get_hot_post(3)) for i in node_list] 
[hot_posts+i.sort(key=sort_by_rate) for i in temp ] 

get_hot_posts()返回的3項的列表這樣

return recent_posts[0:amount-1] 

這可能是因爲該列表短3個元素,它可能一塌糊塗周圍的事物,但

[temp.append(i.get_hot_post(3)) for i in node_list] 

去該命令後,在「臨時」我有名單列表這很好。

但是,當執行

[hot_posts+i.sort(key=sort_by_rate) for i in temp ] 

它給這個錯誤

TypeError: can only concatenate list (not "NoneType") to list 
+0

下面的回答都不錯,這裏是[列表理解(http://docs.python.org/tutorial/datastructures.html#list文檔-comprehensions) – casper

回答

3

我認爲你的意思sorted(i),不是嗎? i.sort()在原地進行排序並不返回任何內容。

另外,你爲什麼要做[hot_posts + ...]?這不會將值存儲在hot_posts中,所以操作無意義,除非將結果分配給新變量。

我懷疑你想這樣做

temp = [i.get_hot_post(3) for i in node_list] 
hot_posts = [sorted(i, key=sort_by_rate) for i in temp] 

雖然我不知道你的最後一行是應該做的。現在,它只是將這三個小列表中的每一個排序,就是這樣。

+0

它應該連接列表hot_posts中的所有元素。感謝sort()方面的建議,這是我第一次使用它。 – Chobeat

+0

然後我認爲它應該看起來像這樣:[post for i in temp for post in i],請參閱http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of - 列出功能於蟒蛇 – Qnan

4

列表方法sort返回None(只是更改列表)。您可以使用sorted()函數。

PS。

[temp.append(i.get_hot_post(3)) for i in node_list] 

不是很好的主意,因爲你會有一個列表None。可能的變體:

temp += [i.get_hot_post(3) for i in node_list] 

甚至

from operator import methodcaller 
temp += map(methodcaller(get_hot_post, 3), node_list)