对集合列表进行排序
我有一堆集合,想要对它们进行交集运算。
有没有什么好的方法可以按照集合的长度来排序,这样可以提高计算效率呢?
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!