Сопоставление двух списков Python
К примеру есть следующие списки:
l1 = ["abc3", "abc3", "abc3"]
l2 = ["word1", "abc3", "list"]
Результат сравнения двух списков(l1, l2) должен вернуть False, поскольку элементы списка l2 повторяются в списке l1 один раз
l3 = ["abc3", "word1", "zzzzzz"]
l4 = ["word1", "abc3", "list"]
Результат сравнения двух списков(l3, l4) должен вернуть True, поскольку элементы списка l4 повторяются в списке l3 два раза.
l5 = ["word1", "zzzz", "z"]
l6 = ["word1", "abc3", "list"]
Результат сравнения двух списков(l5, l6) должен вернуть False, поскольку элементы списка l6 повторяются в списке l5 один раз.
l6 = ['1', '2', '1']
l7 = ['2', '2', '2']
Результат сравнения двух списков(l6, l7) должен вернуть False, поскольку элементы списка l7 повторяются в списке l6 три раза.
Другими словами, то в сравнении двух списков должно быть не более чем одно не совпадение.
Если списки одинаковые, то результат будет True, так как списки совпадают.
l7 = ["1", "word"]
l8 = ["word", "1"]
Ответы (4 шт):
Всё-равно до конца не совсем понятно, что делать, например, если размер списков разный и точно ли мы первый список берём за основу. Но в общем например так:
def comp_list(l1, l2):
return len(set(l2) - set(l1)) <= 1
print(comp_list(l1, l2)) # False
print(comp_list(l3, l4)) # True
print(comp_list(l5, l6)) # False
Создаём из первого списка множество. Элементы второго списка проверяем на вхождение в это множество:
def check(list1, list2):
s = set(list1)
c = sum(1 for v in list2 if v in s)
return c >= len(list2) - 1
print(check(
["abc3", "abc3", "abc3"],
["word1", "abc3", "list"]
))
print(check(
["abc3", "word1", "zzzzzz"],
["word1", "abc3", "list"]
))
print(check(
["word1", "zzzz", "z"],
["word1", "abc3", "list"]
))
print(check(
['1', '2', '1'],
['2', '2', '2']
))
$ python check.py False True False False
вот, ради эксперимента:
import pandas as pd
l1 = ["abc3", "abc3", "abc3"]
l2 = ["word1", "abc3", "list"]
l3 = ["abc3", "word1", "zzzzzz"]
l4 = ["word1", "abc3", "list"]
l5 = ["word1", "zzzz", "z"]
l6 = ["word1", "abc3", "list"]
l7 = ['1', '2', '1']
l8 = ['2', '2', '2']
def cmp_lst(lst1: list, lst2: list) -> bool:
return True if len(pd.DataFrame(index = lst1).
join(pd.DataFrame(index = lst2), how="inner")) == 2 else False
print(cmp_lst(l1, l2))
print(cmp_lst(l3, l4))
print(cmp_lst(l5, l6))
print(cmp_lst(l7, l8))
False
True
False
False
return sorted(l1) == sorted(l2)
Если в списках равные значения, вернется True, Если хоть 1 значение отличается, вернется False