Python:从具有最大长度的子列表返回前n个列表

Python:从具有最大长度的子列表返回前n个列表,python,python-3.x,list,list-comprehension,Python,Python 3.x,List,List Comprehension,我有一个列表列表,其中每个子列表都是一个对象列表。 任务是按长度降序返回前n个子列表的列表 说明: 对于上面的内容,我想返回按长度排列的前3个子列表,即 因为子列表的最大长度分别为列表中的3,2,1 >>> a = [[{},{},{},{}],[{},{},{}],[{},{}],[{}],[]] >>> sorted(a, key=len, reverse=True) [[{}, {}, {}, {}], [{}, {}, {}], [{}, {}],

我有一个列表列表,其中每个子列表都是一个对象列表。 任务是按长度降序返回前n个子列表的列表

说明:

对于上面的内容,我想返回按长度排列的前3个子列表,即

因为子列表的最大长度分别为列表中的3,2,1

>>> a = [[{},{},{},{}],[{},{},{}],[{},{}],[{}],[]]
>>> sorted(a, key=len, reverse=True)
[[{}, {}, {}, {}], [{}, {}, {}], [{}, {}], [{}], []]
在拼接按排序的结果(a,key=len,reverse=True)[0:k]
后,始终可以选择select top
k


要注意的主要观察点是参数
,它也可以接受任何疯狂的函数。

您有两种可能的选择,比如:

l = [[{},{},{},{}],[{},{},{}],[{},{}],[{}],[]]
您可以生成一个全新的列表,并获取所需的3个元素:

sorted(l, key=len, reverse=True)[:3]
l.sort(key=len, reverse=True)
l[:3]
或者,您可以对原始列表进行排序,并将前3个元素包含在其中:

sorted(l, key=len, reverse=True)[:3]
l.sort(key=len, reverse=True)
l[:3]
就性能而言,第二种选择似乎更快:

In [1]: %timeit sorted(l, key=len, reverse=True)[:3]
1.9 µs ± 28.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [2]: %%timeit
    ...: l.sort(key=len, reverse=True)
    ...: l[:3]
    ...: 
1.22 µs ± 33.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

这里的任务是返回一个列表(而不是从问题中修改)。因此,
sorted
会更适合。@Siddharth,我同意,但就性能而言,修改列表似乎比复制新列表更快。@lmiguelvargasf刚刚对您的答案投了赞成票