Я несколько разрешил эту проблему, и я просто пытаюсь найти более эффективный способ сделать это. У меня есть большой список списков, и я пытаюсь сравнить каждый список в большом списке друг с другом.сравнение списка списков с самим собой
Как я могу избежать повторных сравнений, сравнивая уже сопоставленные списки?
Ex: big_list [0] был сопоставлен с big_list [20], поэтому нет причин сравнивать big_list [20] с big_list [0] позже в цикле.
big_list= [[0.12, 0.939, -0.321, 6.342], [0.12, 0.939, -0.321,6.342], [0.0, 1.0, -0.0, -5.166], [0.0, 1.0, 0.0, -5.166], [0.0, 1.0, -0.0, -5.166], [-0.0, 1.0, 0.0, -5.166], [0.0, 1.0, 0.0, -5.166], [0.0, 1.0, 0.0, -5.166], [0.0,1.0, -0.0, -5.166], [0.0, 1.0, 0.0, -5.166], [-0.0, 1.0, -0.0, -5.166], [-0.0, 1.0, 0.0, -5.166], [-0.12, 0.939, 0.321, 0.282], [-0.12, 0.939, 0.321, 0.282], [0.12, 0.939, 0.321, -17.782], [0.12, 0.939, 0.321, -17.782], [-0.0, 1.0, 0.0, 0.834], [0.0, 1.0, 0.0, 0.834], [0.0, 1.0, 0.0, 0.834], [0.0, 1.0, 0.0, 0.834], [-0.12, 0.939, -0.321, 24.406], [-0.12, 0.939, -0.321, 24.406], [0.0, 0.874, -0.486, 21.883], [0.0, 0.874, -0.486, 21.883], [0.0, 0.874, 0.486, -14.598], [0.0, 0.874, 0.486, -14.598]]
for j in range(len(big_list)):
for k in range(len(big_list)):
if j!=k:
result=math.sqrt(sum([(a-b)**2 for a,b in zip(big_list[j],big_list[k])])))
Ранее, я решил этот вопрос, установив определенную терпимость и добавление каждого результата в новый список, но я пытаюсь придумать более эффективный способ сделать это. В конце концов, big_list, вероятно, будет 1 миллион + списки
if result<=rel_tol and big_list[k] not in new_list:
new_list.append(big_list[k])
Почему вы сравниваете их между собой? Если это сортировать список, вы можете указать «ключ», который применяет то, что когда-либо логически к каждому элементу, и сравнивает это. –
Может ли список содержать себя даже косвенно? –
Например, 'a = []; a.extend ([a, (a,)]) ' –