分组问题,32个数分8组,每组中数不能有相同的,请用python编程?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分组问题,32个数分8组,每组中数不能有相同的,请用python编程?相关的知识,希望对你有一定的参考价值。
分组问题:以数字举例,假如我有7个1,4个2,3个3,5个4,7个5,4个6,2个7,如何用python编程,分用8个组,每组中的4个数互不相等。可能分组的结果不唯一,没关系。
#!/usr/bin/env python# coding: utf-8
"""
分组问题:以数字举例,假如我有7个1,4个2,3个3,5个4,7个5,4个6,2个7,
如何用python编程,分用8个组,每组中的4个数互不相等。
可能分组的结果不唯一,没关系。
"""
datasource = "1": 7, "2": 4, "3": 3, "4": 5, "5": 7, "6": 4, "7": 2
groups = map(lambda x: [], range(8))
def showgroups():
"""show groups
"""
print "-" * 16
for group in groups:
print group
def getrandompos(x):
"""在groups中找到不包含x的最短分组
"""
return sorted([(i, group) for (i, group) in enumerate(groups)
if x not in group],
key=lambda (i, group): len(group)
)[0][0]
for element, cnts in sorted(datasource.iteritems(),
key=lambda x: x[1],
reverse=True):
while cnts:
R = getrandompos(element)
if len(groups[R]) < 4 and element not in groups[R]:
groups[R].append(element)
cnts -= 1
showgroups()来自:求助得到的回答 参考技术A 算法可以是这样:把要分组的数据按照其个数多少排序,比如上面是7个1,7个5,5个4,4个2,4个6,3个3,2个7。
然后把这些数依次放入还有空间的组中,每组只放一个。同时尽量保证组的剩余数相同。比如先放7个1,前7组每组一个,放5时从第8个组开始,放了之后再从第一组开始放。追问
你的思路更为简捷易懂,但只能采纳一个回答,仍然感谢你!
为此我这个初学者写了一个程序,请你批评!
不知如何放上来。
===续===
终于搞定了。
请看 http://hi.baidu.com/cnzdzhgzvbgkove/item/1cc8745ca51c11d48c12edd4
另外:如果更进一步,没有哪个小组成员结构一样。即不会出现两个组,都是[1, 5, 4, 6]。那应该如何编程?
def grouping(dataDict):
keys = [p[0] for p in
sorted(dataDict.items(), key=itemgetter(1), reverse=True)]
groups, temp, result = [[[] for i in range(8)]], [], []
for p in keys:
num, glen = dataDict[p], len(groups)
while num:
if num < glen:
glen -= 1
continue
n = num - glen + 1
for i in range(n):
groups[glen - 1][i].append(p)
temp.append(groups[glen - 1][:n])
del groups[glen - 1][:n]
num, glen = num - n, glen - 1
for lst in temp:
if len(lst[0]) == 4:
result += lst
else:
groups.append(lst)
temp = []
groups = [lst for lst in groups if lst and len(lst[0]) < 4]
groups.sort(key=len)
return result
if __name__ == '__main__':
data = 1: 7, 2: 4, 3: 3, 4: 5, 5: 7, 6: 4, 7: 2
print(grouping(data))
算法的主旨是尽可能分散地填充。字数问题,如不理解请问我。
参考技术B 学生分组参加跳绳比赛.按每组6人或每组8人,都能恰好…8518以上是关于分组问题,32个数分8组,每组中数不能有相同的,请用python编程?的主要内容,如果未能解决你的问题,请参考以下文章
用C语言写:36个数字平均分成4组(每组九个数字)有多少种分法,并显示分组