一千萬個為什麽

搜索

對集合列表進行排序

我有一個我想要執行交集的集合列表。

是否有一種有效的方法按長度對這些集合進行排序,以優化計算?

最佳答案

sortkey 參數允許自定義排序鍵。使用 len 可以解決這個問題:

l=
l.sort(key=len)

如果您想要最長的集合,請使用 reverse 參數:

l.sort(key=len, reverse=True)

例如:

>>> l=[set((1,2,5,6,7)), set((1,2,3,4,5,6,7)), set((1,)), set((1,2,3))]
>>> l
[set([1, 2, 5, 6, 7]), set([1, 2, 3, 4, 5, 6, 7]), set([1]), set([1, 2, 3])]
>>> l.sort(key=len)
>>> l
[set([1]), set([1, 2, 3]), set([1, 2, 5, 6, 7]), set([1, 2, 3, 4, 5, 6, 7])]
>>> l.sort(key=len, reverse=True)
>>> l
[set([1, 2, 3, 4, 5, 6, 7]), set([1, 2, 5, 6, 7]), set([1, 2, 3]), set([1])]

Update: Learned something today - lambda isn't necessary, because len is used without extra arguments. Therefore, l.sort(lambda x:len(x)) is equivalent to l.sort(key=len). Thanks, Eugene Homyakov!

轉載註明原文: 對集合列表進行排序