1

ゲーミフィケーションの部分を含むプロジェクトでは、かなり一般的なタスクがあると思います。

たとえば、すべてのユーザー ソリューションを格納するモデルがあり、各ソリューションにはスコア量があるとします。

class Solutions(models.Model):
    text = models.TextField()
    score = models.IntegerField()
    for_top = models.BooleanField()

    def get_place(self):
        return list(Solutions.objects.filter(for_top=True)).index(self) + 1

メソッドのより最適化されたソリューションを見つける方法はありますget_placeか?

4

1 に答える 1

0
next(i for i, x in enumerate(Solutions.objects.filter(for_top=True), 1) if x is self)

基本的に、これは 2 つの最適化を使用します。すべてをメモリに保存する代わりに、next(iterable)繰り返し処理して最初の項目を返します。したがって、短絡し、メモリを占有しません。list(iterable).indexnext

さらに、これはより高速な操作であるisの代わりに を使用します。==

于 2013-09-28T20:30:43.300 に答える