我在使用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]
代码的任何指导表示赞赏。谢谢你的阅读。