У меня есть список:
Lt = [((5,14),(8,14),(10,4)),((5,14),(8,14),(9,14)),((5,14),(8,14)),((5,14),(6,4),(8,14)),
((8,14),(9,14)),((8,14),(10,4))]
И я хочу получить:
Lt = [((5,14),(8,14),(10,4)),((5,14),(8,14),(9,14)),((5,14),(6,4),(8,14))]
Это означает, что если Lt [i] включает Lt [j], Lt [j]будет удален.
А это мой уродливый код:
def filter_clique(old_center):
# [(('X', 2), ('f', 6)), (('X', 2), ('O', 3)), (('X', 2), ('O', 3),('f', 6))]
# return: [(('X', 2), ('O', 3),('f', 6))]
# first: sorted list
old_center = sorted(old_center, key=lambda m: len(m), reverse=True)
rm_index = []
lth = len(old_center)
for i in range(lth-1):
for j in range(i+1, lth):
if set(old_center[j]).issubset(set(old_center[i])):
rm_index.append(j)
if len(rm_index):
old_center = np.delete(old_center, rm_index).tolist()
return old_center
else:
return old_center
Если мой список более длинный, этот процесс становится очень дорогим.
Какой способ самый быстрыйсделать это?Спасибо!