5

今日、これをdjangoコンソールで試しましたが、2つの異なる結果が得られました。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]

私は何が間違っているのですか?明らかに私が欲しいのはform_bw

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

4

5 に答える 5

5

あなたがするとき

querysert.order_by('-modified', '-placed').reverse()

それは実際には

querysert.order_by('modified', 'placed')

したがって、結果が予期しないものである場合は、Pythonで逆にするだけです。

list(reversed(values_list))

reverseまたは、クエリセットにもたらされた順序付けロジックを確認する必要があります。

于 2012-05-01T08:24:02.480 に答える
4

formリストではありません。これはQuerySetであり、リストと多くの類似点がありますが、1つではありません。特に、実際にデータベースに戻ってアイテムを逆の順序で要求するreverseメソッドを定義します。

于 2012-05-01T08:24:25.330 に答える
3

本当にformリストですか?list.reverse結果が返されないことに注意してください。そのため、プロンプトの結果は怪しげに見えます。

In [1]: lst = [1, 2, 3, 4]
In [2]: lst.reverse()    # <-- note: no result returned here (~ None)
In [3]: lst 
Out[3]: [4, 3, 2, 1]
In [4]:

また、補足として、より良い使用方法reversedは次のとおりです。

In [5]: lst = [1, 2, 3, 4]

In [6]: rev = list(reversed(lst))

In [7]: rev
Out[7]: [4, 3, 2, 1]

または、負のステップのスライスを使用します。

In [8]: rev = lst[::-1]

In [9]: rev
Out[9]: [4, 3, 2, 1]
于 2012-05-01T08:13:15.953 に答える
3

私はDjangoの専門家ではないため、タイプがわかりませんform。ただし、これが標準のリストではないことは明らかです。

>>> form.reverse()
Out[15]: [1, 1, 1, 1, 1, 1, 1, -1, -1, -1]

組み込みlist.reverse()関数はNoneを返しますが、このreverse()関数は別の何かを返しているように見えます。これは、それがリストではないと結論付けることにつながりますform

次のことを試してください。

form = list(form)
form.reverse()

また、次の点にも注意してください。

>>> form_bw = []
>>> for f in reversed(form):
...     form_bw.append(f)

言うのは長い道のりです:

>>> form_bw = list(reversed(form))
于 2012-05-01T08:13:30.703 に答える
0

ここでの他の解決策はほとんどの場合正しいですが、Django QuerySetのvalues_listでは、機能しませんでした。

唯一の方法は:

season_ids = matchesByLeague.values_list('season_id', flat=True).distinct()
season_ids = list(reversed(season_ids))

#Not working
#season_ids = matchesByLeague.values_list('season_id', flat=True).distinct()
#season_ids.reverse()
#season_ids = matchesByLeague.values_list('season_id', flat=True).distinct().reverse()
#reversed(list(season_ids))

@NPEと@xpantaに感謝します

于 2018-09-01T09:52:13.927 に答える