按对象的属性阈值将对象列表分组为子组

时间:2019-07-12 23:50:29

标签: python python-3.x

如果我要拥有这样的列表,如何将其按值阈值分组?

最大分组阈值为5,分组将按以下方式工作:

[1, 2, 4, 7, 10, 20, 100, 101] -> [[1, 2, 4], [7, 10], [20], [100, 101]]

itertools.groupby可以做到吗?

1 个答案:

答案 0 :(得分:0)

您在这里。首先是更具可读性的多行版本:

import itertools

numbers = [1, 2, 4, 7, 10, 20, 100, 101]

group_iterator = itertools.groupby(numbers, lambda num: num//5)

numbers_groups = []
for _, group in group_iterator:
    numbers_groups.append(list(group))

print(numbers_groups)
[[1, 2, 4], [7], [10], [20], [100, 101]]

还是一线:

import itertools

numbers = [1, 2, 4, 7, 10, 20, 100, 101]

numbers_groups = [list(group) for _, group in itertools.groupby(numbers, lambda num: num//5)]
print(numbers_groups)
[[1, 2, 4], [7], [10], [20], [100, 101]]

此方法的工作方式是itertools.groupby将一个密钥生成函数作为输入。如果将此功能设置为num//5,则数字0-4将生成键“ 0”,数字5-9将生成键“ 1”,数字10-14将生成键“ 2”,等等。