如果我要拥有这样的列表,如何将其按值阈值分组?
最大分组阈值为5,分组将按以下方式工作:
[1, 2, 4, 7, 10, 20, 100, 101] -> [[1, 2, 4], [7, 10], [20], [100, 101]]
itertools.groupby
可以做到吗?
答案 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”,等等。