我有一个列表列表,其中每个子列表都是一个对象列表。 任务是按长度降序返回前 n 个子列表的列表。
插图:
[[{},{},{},{}],[{},{},{}],[{},{}],[{}],[]]
对于上面,我想按长度返回前 3 个子列表的列表,即
[[{},{},{},{}],[{},{},{}],[{},{}]]
因为子列表的最大长度分别为 3,2,1。
最佳答案
你有两个可能的选择,比方说:
l = [[{},{},{},{}],[{},{},{}],[{},{}],[{}],[]]
您可以生成一个全新的列表并获取所需的 3 个元素:
sorted(l, key=len, reverse=True)[:3]
或者,您可以对原始列表进行排序,它们取前 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)
关于Python:从具有最大长度的子列表中返回前 n 个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46330534/