这是我的代码
[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
答案 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]
虽然我不知道你的最后一行应该做什么。现在它只是对这三个小列表中的每一个进行排序,就是这样。