在 Python 中使用列表推导来创建按预定义值排序的 2D 列表

Fat*_*aur 3 python

我有一个函数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], [], []]

有人可以告诉我我做错了什么,我该如何解决?

Chr*_*ris 5

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)

  • 这更pythonic,太棒了! (2认同)