我有一个函数number_sort()需要返回一个包含 4 个列表的 2d 列表。函数需要对 0-12、13-25、26-38 和 39-51 之间给出的数字进行排序,如下所示:
鉴于: [2, 2, 3, 4, 1, 13, 15, 51, 10, 15, 28]
回来: [[1, 2, 2, 3, 4, 10], [13, 15, 15], [28], [51]]
我试着用列表理解来做。
def number_sort(cards: list):
return [[item for item in cards if i * 13 <= item <= (i * 12 + 1)] for i in range(4)]
Run Code Online (Sandbox Code Playgroud)
但是当我给出上面给出的确切示例列表时,它返回 [[1], [13], [], []]
有人可以告诉我我做错了什么,我该如何解决?
IIUC,您想使用 13 作为楼层分隔符进行分组:
from itertools import groupby
[list(g) for _, g in groupby(sorted(l), key=lambda x: x//13)]
Run Code Online (Sandbox Code Playgroud)
输出:
[[1, 2, 2, 3, 4, 10], [13, 15, 15], [28], [51]]
Run Code Online (Sandbox Code Playgroud)