如何在python

时间:2017-12-20 11:33:20

标签: python combinations permutation

我在使用python实现时将一些事情放在一起面临一些问题(只是初学者)。我想基于另一个数组向量在排列和组合上创建一组数据数组,该数组向量仅基于三种类型的数字-1,0,1。它可以是任何顺序和任何数字。它可以是[-1 1 0 0 -1][-1 -1 0 0][-1 1]等。

假设我有基于模型化学反应[a b c d] = [5 4 0 0]的4个值a + b -> c + d的数据数组,那么根据此反应,更改数组向量将创建为v = [-1 -1 1 1],如 a b 正在生成 c d ,直到 a b 耗尽并且到达0。现在,当我们在[a b c d]上应用此数组向量时,我们将获得类似[4 3 1 1], [3 2 2 2], [2 1 3 3], [1 0 4 4]的新数组...现在我们无法进一步生成新数组,因为 v 无法应用于{{ 1}}因为 b 为0.这是一个简单的例子。我运行这个简单的代码来创建下一个数组,但是不在循环中来创建更多的数组:: [1 0 4 4]

[3 2 0 2], [2 1 0 3], [1 0 0 4]

这就是我想要实现的目标:: 如果我有多个反应和多个矢量数组,比如

class SumList(object):
    def __init__(self, this_list):
        self.mylist = this_list

    def __add__(self, other):
        new_list = []
        zipped_list = zip(self.mylist, other.mylist)
        for item in zipped_list:
            new_list.append(item[0] + item[1])
        return SumList(new_list)

    def __repr__(self):
        return str(self.mylist)

list1 = SumList([5, 4, 0, 0])
list2 = SumList([-1, -1, 1, 1])
sum = list1 + list2
print(sum)

其中,a + b -> c c -> a + b c -> b + d v1 = [-1 -1 1 0], v2 = [1 1 -1 0], v3 = [0 1 -1 1] 的初始数量,并希望在[a b c d] = [5 4 0 0]上应用v1,v2和v3来创建新的数据数组,例如......

[a b c d]上应用v1时,它会提供

[a b c d]

[4 3 1 0], [3 2 2 0], [2 1 3 0], [1 0 4 0] 上应用v2时,它将检查v {2}上是否无法应用v2,因为系统中的总分子数已固定[a b c d]在最大值,并且不能分别增加到a = 6,b = 5,所以在这种情况下v2不能给我们[5 4 0 0] ..所以现在v2将应用于(a=5, b=4),这是第一个新的数组v1的情况...所以我们将获得[6 5 -1 0]。现在v2将应用于v1的第二个新数组,即[4 3 1 0],它给我们[5 4 0 0] ....现在v2应用于第3 [3 2 2 0]和第5 [4 3 1 0]个新数组v1这将分别给我们([2 1 3 0])([1 0 4 0])。所以最终的v2新数组列表将是

[3 2 2 0]

[2 1 3 0] 上应用v3后,将再次检查是否可以在[5 4 0 0], [4 3 1 0], [3 2 2 0], [2 1 3 0] 上应用v3。它清楚地表明我们无法在[a b c d]上应用v3,因为它会给[5 4 0 0]这是不可接受的。所以现在,我们需要检查是否可以在v2和v3的新数组上应用v3,并为v3创建新的数组列表。

v3可以在[5 4 0 0] 上应用一次,为我们提供新的数组[5 5 -1 -1]

v3可以在[4 3 1 0] 上应用两次,为我们提供2个新数组[4 4 0 1][3 2 2 0] ... [注意:这里b = 4所以我们不能再适用v3,因为b不能超过其初始数量4 ....而c将为-1,这是无效的。

一旦通过在每个可能的新阵列上应用v1,v2和v3生成所有新阵列,我需要使用union并且只打印唯一的数组.. !!正如您所看到的,在v1和v2的情况下会重复某些数组。

简单来说,我想在[3 3 1 1]和所有可能的新数组上应用v1,v2和v3,在可能的情况下应用检查并在最后一个中取出union并打印它。我希望我能以一种简单的方式解释我的问题。目前我正在尝试修改

[3 4 0 2]

有关如何修改 [5 4 0 0] 代码的任何指导表示赞赏。谢谢你的阅读。

0 个答案:

没有答案