コンテキスト - パワー フロー ネットワークのループ フローを決定するアルゴリズムの開発。
問題:
リストのリストがあります。各リストは、アルゴリズムによって決定されたネットワーク内のループを表します。残念ながら、アルゴリズムは逆の重複も検出します。
すなわち
L1 = [a, b, c, -d, -a]
L2 = [a, d, c, -b, -a]
(c は負の値であってはならないことに注意してください。ネットワークの構造と定義されたフローにより、正しく記述されています)
現在、これら 2 つのループは同等であり、ネットワーク全体で逆の構造をたどっているだけです。
リストのリストからL2を破棄しながら、L1を保持したいと思います。したがって、6 つのループのリストがあり、そのうち 3 つが逆の重複である場合、3 つすべてを保持したいと考えています。
さらに、ループは上記の形式に従う必要はありません。それは短くても長くてもかまいませんし、符号構造 (例: pos 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 の回答を受け入れています。