对集合列表进行排序

hym*_*oth 5 python

我有一个我想要执行交集的集合列表.

是否有一种有效的方法按长度对这些集合进行排序,以优化计算?

Ada*_*tan 10

允许自定义排序键的key参数sort.使用len将做的伎俩:

l=<list_of_sets>
l.sort(key=len)
Run Code Online (Sandbox Code Playgroud)

如果您想要最长的集合,请使用以下reverse参数:

l.sort(key=len, reverse=True)
Run Code Online (Sandbox Code Playgroud)

例如:

>>> 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])]
Run Code Online (Sandbox Code Playgroud)

更新:今天学到的东西 - lambda不是必需的,因为len没有额外的参数使用.因此,l.sort(lambda x:len(x))相当于l.sort(key=len).谢谢,Eugene Homyakov!

  • 不需要Lambda,你可以做`l.sort(key = len)` (13认同)

Joh*_*ooy 7

如果L是集合列表

sorted(L, key=len, reverse=True)
Run Code Online (Sandbox Code Playgroud)

或排序到位

L.sort(key=len, reverse=True)
Run Code Online (Sandbox Code Playgroud)

  • @Adam,短代码中的单个变量名称可以使它们更容易理解。PEP8 实际上更多的是编写可维护的生产代码。小写的“l”经常与数字“1”混淆。甚至有的字体是一模一样的 (2认同)