python - Python 3.7,将集合拆分为组,但具有最小组大小
问题描述
我正在寻找一种有效的方法来编写一段代码。
我正在制作一个机器人,将人们分成 4 人一组。每个人都通过对消息做出反应来注册(它是一个不和谐的机器人,但这不应该影响应用程序的这一部分),然后机器人将他们带走并将它们分成几组4。
但是,如果有许多人不能被 4 整除,机器人会做什么?我要做的是不允许少于 3 人一组。
12 人 = 3 组,每组 4 人
13人=3组3人,1组4人
14人=2组3人,2组4人
Python 是否有一种简单的方法来做这种类型的数学?
我也不确定是否有更有效的方式来表达我想说的话。如果有人知道我可以使用的特定搜索词,那也会很有帮助。
解决方案
使用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]]
推荐阅读
- javascript - 如何创建在特定日期和时间启用的按钮,例如 Flipkart 销售
- mysql - 如何对包含数字和字母的字符串进行排序?
- ruby-on-rails - 在 Ruby on Rails 控制器中重构重复的救援异常处理程序
- reactjs - React Native 重新渲染屏幕
- bluetooth-lowenergy - 如何编程这个 BLE 位置标签?
- episerver - 页面的 Episerver 排序顺序不应影响网站页面的排序顺序
- php - MySQL 与 Ajax/PHP
- mongodb - MongoDB 聚合 + $match + $group + 条件过滤器
- javascript - 按翻译值而不是业务逻辑拆分 i18n 字典是否正确?
- javascript - 使用 NodeJS 串口包从串口读取传入数据的问题