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]

このコマンドの後、「temp」にリストのリストがあり、問題ありません。

しかし、それが実行されるとき

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

このエラーが発生します

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

2 に答える 2

4

List メソッド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)
于 2012-08-22T19:42:32.267 に答える
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]

私はあなたの最後の行が何をすることになっているのか分かりませんが。これで、これら3つの小さなリストをそれぞれ並べ替えるだけで、それだけです。

于 2012-08-22T19:35:58.637 に答える