列表推导,列表列表和列表连接

时间:2012-08-22 19:33:16

标签: python google-app-engine

这是我的代码

[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]

在这个命令之后,在“temp”中我有一个列表列表,没关系。

但是当它执行时

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

它给出了这个错误

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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]

虽然我不知道你的最后一行应该做什么。现在它只是对这三个小列表中的每一个进行排序,就是这样。