python / django list.reverse()和reversed(list)

xpa*_*nta 5 python django list

我今天在django控制台中尝试了此操作,但得到了两个不同的结果。我认为这会list.reverse()反转列表(即第一个对象变为最后一个,依此类推)[1]。但是,事实并非如此。

>>> from django.db.models import Q
>>> q1 = Q(result=1)
>>> q2 = Q(result=-1)
>>> q3 = q1 | q2
>>> form = UserData.objects.filter(user=user).filter(coins__gt=0).filter(q3).order_by('-modified', '-placed').values_list('result', flat=True)[:10]
>>> form
Out[14]: [-1, -1, -1, -1, -1, 1, -1, 1, -1, -1]
>>> form.reverse()
Out[15]: [1, 1, 1, 1, 1, 1, 1, -1, -1, -1]
>>> form_bw = []
>>> for f in reversed(form):
...     form_bw.append(f)
...     
>>> form_bw
Out[18]: [-1, -1, 1, -1, 1, -1, -1, -1, -1, -1]
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?显然我想要的是form_bw

[1] http://docs.python.org/tutorial/datastructures.html

okm*_*okm 5

当你做

querysert.order_by('-modified', '-placed').reverse()
Run Code Online (Sandbox Code Playgroud)

它实际上意味着

querysert.order_by('modified', 'placed')
Run Code Online (Sandbox Code Playgroud)

因此,如果结果出乎意料,只需在 Python 中反转即可

list(reversed(values_list))
Run Code Online (Sandbox Code Playgroud)

或者您必须检查reverse带到查询集的排序逻辑。