测试变量的所有排列而无需硬编码

时间:2019-03-12 01:20:28

标签: python variables

我有9个不同的变量,我们将它们称为-i,我要测试 a+b+c == d+e+f & a+b+c == g+h+i & a+b+c == a+d+g & a+b+c == b+e+h & a+b+c == c+f+i & a+b+c == a+e+i & a+b+c == c+e+g。但是有一个问题。我想测试所有可能的安排,例如交换b和h甚至更多的变量。我还计算出有45360种不同的安排。我想知道是否有任何可能的方法可以做到……我将不胜感激!

1 个答案:

答案 0 :(得分:0)

您可以使用itertools.permutations生成所有排列的列表,然后可以对它们进行求和,或者编写自己的自定义添加函数:

def add3(n1, n2, n3):
    return n1+n2+n3

list_of_nums = [a, b, c, d, e, f, g, h, i]
all_perm_sums = (add3(n1, n2, n3) for n1, n2, n3 in itertools.permutations(list_of_nums, 3))
all_perm_sums_are_equal = len(set(all_perm_sums)) == 1

提示:请注意浮点数,因为浮点加法运算不是可交换的,a+b不一定等于b+a,并且它们也不是关联的,(a+b)+c不一定是等于a+(b+c)。如果所有数字都是整数,这应该不是问题。