反向查询集/列表,然后是sli

2024-03-28 16:34:13 发布

您现在位置:Python中文网/ 问答频道 /正文

对任何标记为重复的人:这不是因为我有一套2个特定的目标,按照特定的顺序来制定。在另一个问题中,它只需要反转,这稍微简单一点。感谢您抽出时间阅读。

我有一个Django查询集,用更简单的术语来说,它似乎是列表的扩展(如果我错了,请纠正我)

我需要:

  1. 反转查询集或列表,然后
  2. 切分列表

我是这样做的:

return reversed(querySet)[:20]

然而,由于某种原因,现在我得到了一个错误:

"'reversed' object is not subscriptable"

我很容易做到:

return querySet[:20:-1]

但这会导致列表首先被切片,然后被向后排序。你知道吗

因此,我正在寻找下一个最好的黑客方法来实现这一点的过程中

但当我找到它的时候,我想知道你最好的方法是什么?你知道吗


Tags: django方法标记目标列表returnobject顺序
2条回答

这是因为,在大多数情况下,Django querysets似乎就是这样,reversed不生成列表,而是生成迭代器:

>>> reversed([1,2,3])
<list_reverseiterator object at 0x7f3ba766cc50>

迭代器是不可下标的。更确切地说:它没有__getitem__方法。你知道吗

因此,这将不起作用:

>>> reversed([1,2,3])[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list_reverseiterator' object is not subscriptable

但这将(在访问项之前从迭代器创建一个列表):

>>> list(reversed([1,2,3]))[0]
3

Queryset.reverse()https://docs.djangoproject.com/en/2.2/ref/models/querysets/#reverse

querySet.reverse()[:20]应该这样做。你知道吗

相关问题 更多 >