开发者

Sort a list of sets

I have a lis开发者_如何转开发t of sets on which I want to perform intersection.

Is there an efficient way to sort those sets by length, in order to optimize calculations?


The key argument of sort allows custom sort keys. Using len will do the trick:

l=<list_of_sets>
l.sort(key=len)

If you want the longest set first, use the reverse argument:

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

For example:

>>> 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!


if L is the list of sets

sorted(L, key=len, reverse=True)

or to sort in place

L.sort(key=len, reverse=True)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜