上下文 - 开发算法以确定潮流网络中的回路流。
问题:
我有一个列表列表,每个列表代表通过我的算法确定的网络中的一个循环。不幸的是,该算法还将拾取反向重复。
IE
L1 = [a, b, c, -d, -a]
L2 = [a, d, c, -b, -a]
(请注意,c 不应为负数,由于网络结构和定义的流程,它是正确的)
现在这两个循环是等价的,只是在整个网络中遵循相反的结构。
我希望保留 L1,同时从列表中丢弃 L2。因此,如果我有一个包含 6 个循环的列表,其中 3 个是反向重复,我希望保留所有三个。
此外,循环不必遵循上面指定的格式。它可以更短,也可以更长,并且符号结构(例如 pos pos pos neg neg)不会在所有情况下都出现。
我一直试图通过反转列表并比较绝对值来对此进行排序。
我完全被难住了,任何帮助将不胜感激。
基于 mgibson 提供的一些代码,我能够创建以下内容。
def Check_Dup(Loops):
Act = []
while Loops:
L = Loops.pop()
Act.append(L)
Loops = Popper(Loops, L)
return Act
def Popper(Loops, L):
for loop in Loops:
Rev = loop[::-1]
if all (abs(x) == abs(y) for x, y in zip(loop_check, Rev)):
Loops.remove(loop)
return Loops
这段代码应该一直运行,直到每次都没有循环丢弃重复项。我接受 mgibsons 的答案,因为它提供了创建解决方案所需的密钥