Списки в списке сравнения с другим списком
Мне нужно проверить, если список со списками содержит список с аналогичными значениями указанного списка, значения могут быть в другом порядке, но если все значения одинаковы, он должен возвращать 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)
должен дать вам результат, который вы хотите. Пока под "похожим" вы подразумеваете "то же самое".