Списки в списке сравнения с другим списком

Мне нужно проверить, если список со списками содержит список с аналогичными значениями указанного списка, значения могут быть в другом порядке, но если все значения одинаковы, он должен возвращать true

a= ["1","2","3","4","5"]

b= ["2","3","6","4","7"]

e = (["1","3","2","4","5"],["2","3","6","4","7"])


CombinationFound = []
for i in e:
    if i == a:
        CombinationFound = True
        break;
    else:
        CombinationFound = False

он должен вернуть истину, так как ["1","2","3","4","5"] а также ["1","3","2","4","5"] имеют одинаковые значения

5 ответов

Вам необходимо преобразовать список, с которым вы пытаетесь сопоставить, во что-то, с чем вы можете сравнить, не заботясь об исходном порядке. Если число появлений элемента списка имеет значение, используйте отсортированные списки. Если это не так, используйте наборы.

list_to_match = sorted(a)
combination_found = False
for i in e:
    if sorted(i) == list_to_match:
        combination_found = True
        break

Эта версия будет отличать списки с различным количеством повторяющихся элементов, то есть [0, 1, 1, 2] не будет соответствовать [0, 1, 1, 1, 2], Если вам не нужна эта возможность, используйте set(a) а также set(i) вместо:

set_to_match = set(a)
combination_found = False
for i in e:
   if set(i) == set_to_match:
       combination_found = True
       break

Или, для более краткой версии, используйте встроенную any функция с выражением генератора:

list_to_match = sorted(a)
combination_found = any(sorted(i) == list_to_match for i in e)

Попробуйте преобразовать эти списки в наборы:

def isthesame(a,b):
    return set(b) == set(a)

Например, если у вас есть:

a= ["1","2","3","4","5"]
b= ["2","3","6","4","7"]

Это решение должно работать для списков, в которых нет дублирующих элементов.

def checker(list_of_lists, example):
    for i in list_of_lists:
        if tuple(sorted(i)) == tuple(sorted(example)):
            return True
    return False

Другой способ сравнить без for цикл:

found = any(set(a)==set(l) for l in e)

Наборы Python - намного лучшая реализация для вашей конкретной проблемы.

Наборы - это математические объекты, которые содержат данные, но имеют методы для определения объединений, пересечений, различий и т. Д. Между двумя коллекциями.

С помощью:

set(a) == set(b)

должен дать вам результат, который вы хотите. Пока под "похожим" вы подразумеваете "то же самое".

Другие вопросы по тегам