リストが 1 つあり、リスト内のループを削除したいと考えています。たとえば、1 つの要素が既にリストにある場合、この要素の間にある繰り返しのすべての要素を削除したいとします。例えば:
a=[(4,4),(5,6),(7,7),(7,6),(4,4),(8,8),(9,9)]
そして、私はこれに似たものを手に入れたい:
a [(4,4),(8,8),(9,9)]
どうすればこれを入手できますか?
ありがとう
a = [(4,4),(5,6),(7,7),(7,6),(4,4),(8,8),(9,9)]
b = []
for e in a:
if e in b:
b[b.index(e)+1:] = []
else:
b.append(e)
# b == [(4, 4), (8, 8), (9, 9)]
#! /usr/bin/python3.2
while True:
loops = sorted ( ( (x [0], y [0] ) for x, y in [ (x, y) for x in enumerate (a) for y in enumerate (a) ] if x [0] < y [0] and x [1] == y [1] ), key = lambda x: x [0] - x [1])
if loops: a = a [:loops [0] [0] ] + a [loops [0] [1]:]
else: break
これにより、交差する (重複する) ループの場合に最も長いループ (の 1 つ) から始まるすべてのループが削除されます。