Сопоставление двух списков 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 шт):

Автор решения: CrazyElf

Всё-равно до конца не совсем понятно, что делать, например, если размер списков разный и точно ли мы первый список берём за основу. Но в общем например так:

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
→ Ссылка
Автор решения: Stanislav Volodarskiy

Создаём из первого списка множество. Элементы второго списка проверяем на вхождение в это множество:

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
→ Ссылка
Автор решения: strawdog

вот, ради эксперимента:

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
→ Ссылка
Автор решения: chernyahovsky2010

return sorted(l1) == sorted(l2)

Если в списках равные значения, вернется True, Если хоть 1 значение отличается, вернется False

→ Ссылка