這似乎是一個很奇怪的數據集,但假設你真的需要這則:
如果你在一開始移除0
S和末尾,則是相當容易進行排序:
>>> l = ['entrya', 5, 'entryb', 10, 'anotherentry', 7, 'entry', 1, 'entryd', 30]
>>> [b for a in sorted(zip(*[iter(l)]*2), key=lambda x: x[1]) for b in a]
['entry', 1, 'entrya', 5, 'anotherentry', 7, 'entryb', 10, 'entryd', 30
因此,假設您沒有0
作爲您的其他entries
的值,那麼您可以將其作爲2種情況處理,將所有零對進行排序,然後將所有零加回去。
>>> l = [0,0,0,0,0,'entrya',5, 'entryb', 10, 'anotherentry', 7, 'entry', 1, 'entryd', 30, 0,0,0,0,0]
>>> pairs = [b for a in sorted(zip(*[iter(filter(lambda x: x!=0, l))]*2), key=lambda x: x[1]) for b in a]
>>> zeros = list(filter(lambda x: x == 0, l))
>>> pairs + zeros
['entry', 1, 'entrya', 5, 'anotherentry', 7, 'entryb', 10, 'entryd', 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
從列表中創建的元組,那麼元組進行排序,然後壓平列表。但是在開始和結束時沒有關聯,只有0.0 ... –
爲什麼''entrya',5'從結果中錯過了? – RomanPerekhrest
oops忘記了入口a。編輯 – Plinzelplein