0

奇妙な要件が発生しました...

次のようなモデルがあるとします。

class MyModel(models.Model):
    priority = models.IntegerField()
    time = models.DateTimeField()

私たちが持っていると仮定します:

by_time = MyModel.objects.order_by('time')
by_prio = MyModel.objects.order_by('priority')

アイテムを交互の並べ替え順序で表示する必要があります。たとえば、1 つの項目を時間で並べ替え、1 つの項目を優先度で並べ替え、次の項目を時間で並べ替えるなど... 各項目はリスト内で一意である必要があります (2 つのリストを結合して 2 倍の長さのリストにすることはできません)。

どうすればそのようなことを実装し、比較的効率的に保つことができますか?

編集: いくつかのメモ:

  1. 終了リストの項目は一意でなければならないため、2 つのリストをマージすることはできません。
  2. リストをマージして後で重複を削除すると、並べ替え順序が台無しになります (たとえば、2 つの隣接する値が同じ順序であるなど)。
4

1 に答える 1

1

You can combine the two lists this way:

>>> result = [None]*(len(by_time)+len(by_prio))
>>> result[::2] = by_time
>>> result[1::2] = by_prio
>>> result = [result.pop(i) for i in range(len(result))[::-1] if result.count(result[i]) > 1 ]
于 2013-04-05T20:37:36.723 に答える