对集合列表进行排序

7 投票
2 回答
8764 浏览
提问于 2025-04-17 00:41

我有一堆集合,想要对它们进行交集运算。

有没有什么好的方法可以按照集合的长度来排序,这样可以提高计算效率呢?

2 个回答

7

如果 L 是一个集合的列表

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

或者可以就地排序

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

在排序的时候,sort函数的key参数可以让你自定义排序的规则。比如说,使用len这个函数就可以按照长度来排序:

l=<list_of_sets>
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])]

更新:今天学到了一点 - 其实不需要用到lambda,因为len本身就可以直接使用,不需要额外的参数。所以,l.sort(lambda x:len(x))l.sort(key=len)是一样的。感谢,Eugene Homyakov

撰写回答