2013-04-05 73 views
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個按優先級排序,另一個按時間排序,等等...每個項目在列表中都必須是唯一的(不能只將兩個列表加入到兩個更長的列表中)。

我該如何實現這樣的事情,並保持相對高效?

編輯: 的幾個注意事項:

  1. 在結束列表中的項目必須是唯一,所以我不能只合並兩個列表。
  2. 如果我合併列表並刪除重複後,排序順序將被破壞(例如2個相鄰的值按相同的順序)。

回答

1

您可以結合兩個列表是這樣的:

>>> 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 ] 
+0

一個。重複。 b。如果我只是刪除重複它毀壞排序順序。 c。交替合併兩個列表非常好的方式。 upvoted。 – yprez 2013-04-05 20:42:27

+1

我正在編輯:)感謝您的讚賞 – karthikr 2013-04-05 20:47:10