上下文 - 用于确定潮流网络中环路流的开发算法。通过唯一反转的绝对条件对列表进行排序列表
问题:
我有一个列表的列表,每个列表表示通过我的算法来确定网络中的循环。不幸的是,该算法也将挑选出相反的副本。
即
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的答案,因为它提供了必要的密钥创建解决方案
如果这是一个面试问题或功课,请将其标记为这样,所以我们不会给出答案。 – ely
不应该有一个'-c'? –
不一定。如果节点的数量是奇数,那么它的中位数实际上就是其中的一个节点。按照惯例,它可以始终列出从开始到中位数的所有内容为正数,并且只将后中位数列为负数。 – ely