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)

基本上这使用了两个优化。next(iterable)而不是list(iterable).index显而易见的:不是将所有内容都存储在内存中,而是next遍历并返回第一项。所以它会短路并且不会占用内存。

此外,这使用is而不是==,这是一个更快的操作。

于 2013-09-28T20:30:43.300 回答