首页 > 解决方案 > Python 3.7,将集合拆分为组,但具有最小组大小

问题描述

我正在寻找一种有效的方法来编写一段代码。

我正在制作一个机器人,将人们分成 4 人一组。每个人都通过对消息做出反应来注册(它是一个不和谐的机器人,但这不应该影响应用程序的这一部分),然后机器人将他们带走并将它们分成几组4。

但是,如果有许多人不能被 4 整除,机器人会做什么?我要做的是不允许少于 3 人一组。

12 人 = 3 组,每组 4 人

13人=3组3人,1组4人

14人=2组3人,2组4人

Python 是否有一种简单的方法来做这种类型的数学?

我也不确定是否有更有效的方式来表达我想说的话。如果有人知道我可以使用的特定搜索词,那也会很有帮助。

标签: pythonpython-3.x

解决方案


使用divide来自more_itertools

from more_itertools import divide

a_list = [range(12), range(13), range(14), range(15), range(16)]

for i in a_list:
    divisor = len(i) // 4
    if len(i) % 4 == 0:
        print([list(j) for j in divide(divisor, i)])
    else:
        print([list(j) for j in divide(4, i)])
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
[[0, 1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10], [11, 12, 13]]
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14]]
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]

推荐阅读