Python:从具有最大长度的子列表返回前n个列表
我有一个列表列表,其中每个子列表都是一个对象列表。 任务是按长度降序返回前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) [[{}, {}, {}, {}], [{}, {}, {}], [{}, {}],
对于上面的内容,我想返回按长度排列的前3个子列表,即
因为子列表的最大长度分别为列表中的3,2,1
>>> a = [[{},{},{},{}],[{},{},{}],[{},{}],[{}],[]]
>>> sorted(a, key=len, reverse=True)
[[{}, {}, {}, {}], [{}, {}, {}], [{}, {}], [{}], []]
在拼接按排序的结果(a,key=len,reverse=True)[0:k]
后,始终可以选择select topk
要注意的主要观察点是参数键
,它也可以接受任何疯狂的函数。您有两种可能的选择,比如:
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刚刚对您的答案投了赞成票