我有一个数组数组里元素都是像长=100宽=200、长=130宽=2103的对象如何使用Combinatorics对数组进行排列组合要求组合里的每个元素最大长和最小长相差小于20、最大宽和最小宽相差小于20
首先,需要将对象转化为元组的形式,方便进行排列组合操作。假设数组名为arr,可以使用如下代码将对象转化为元组:
tuples = [(obj['长'], obj['宽']) for obj in arr]
接着,使用Combinatorics库中的combinations和permutations函数进行排列组合操作。由于要求组合里的每个元素最大长和最小长相差小于20、最大宽和最小宽相差小于20,需要在组合生成过程中进行筛选。
具体实现可以参考以下代码:
from itertools import combinations, permutations
# 将对象转化为元组
tuples = [(obj['长'], obj['宽']) for obj in arr]
result = [] # 存储符合条件的组合
# 对元组进行排列组合操作
for n in range(2, len(tuples) + 1): # 组合中元素个数从2到len(tuples)
for combination in combinations(tuples, n): # 生成组合
for permutation in permutations(combination): # 生成排列
# 判断组合是否符合条件
if all(max(permutation[i][0], permutation[i+1][0])-min(permutation[i][0], permutation[i+1][0])<=20
and max(permutation[i][1], permutation[i+1][1])-min(permutation[i][1], permutation[i+1][1])<=20
for i in range(len(permutation)-1)):
result.append(permutation)
print(result)
以上代码中,result列表存储符合条件的组合。all()函数用于判断组合是否符合条件,如果所有元素之间的最大差值都小于等于20,则返回True,否则返回False。最后输出符合条件的组合即可
原文地址: https://www.cveoy.top/t/topic/cpyf 著作权归作者所有。请勿转载和采集!