Сравнение двух списков в Python (почти одинаково)

У меня есть два списка со значениями в примере:

List 1 = TK123,TK221,TK132 

А ТАКЖЕ

List 2 = TK123A,TK1124B,TK221L,TK132P

Я хочу получить другой массив со всеми значениями, которые совпадают между списком 1 и списком 2, а затем вывести те, которые не совпадают.

Для моих целей считается, что "TK123" и "TK123A" совпадают. Итак, из списков выше, я бы получил только TK1124B,

Меня не особо волнует скорость, так как я планирую запустить эту программу один раз и покончить с ней.

3 ответа

Решение

Это сравнивает каждый элемент в списке с каждым элементом в другом списке. Это не будет работать, если у обоих есть буквы (например, TK132C и TK132P не будут совпадать). Если это проблема, прокомментируйте ниже.

list_1 = ['TK123','TK221','TK132'] 
list_2 = ['TK123A','TK1124B','TK221L','TK132P']

ans = []
for itm1 in list_1:
    for itm2 in list_2:
        if itm1 in itm2:
            break
        if itm2 in itm1:
            break
    else:
        ans.append(itm1)

for itm2 in list_2:
    for itm1 in list_1:
        if itm1 in itm2:
            break
        if itm2 in itm1:
            break
    else:
        ans.append(itm2)

print ans
>>> ['TK1124B']
>>> list1 = 'TK123','TK221','TK132'
>>> list2 = 'TK123A','TK1124B','TK221L','TK132P'
>>> def remove_trailing_letter(s):
...     return s[:-1] if s[-1].isalpha() else s
... 
>>> diff = set(map(remove_trailing_letter, list2)).difference(list1)
>>> diff
set(['TK1124'])

И вы можете добавить последнее письмо обратно,

>>> add_last_letter_back = {remove_trailing_letter(ele):ele for ele in list2}
>>> diff = [add_last_letter_back[ele] for ele in diff]
>>> diff
['TK1124B']

За:

list_1 = ['TK123', 'TK221', 'TK132']
list_2 = ['TK123A', 'TK1124B', 'TK221L', 'TK132P']

Любой из двух следующих фрагментов даст список общих элементов между двумя списками:

list(set(list_1).intersection(list_2))
# returns []

list(set(list_1) & set(list_2))
# returns []

Чтобы получить список эксклюзивных предметов:

list(set(list_1) ^ set(list_2)) 
# returns ['TK1124B', 'TK132P', 'TK123A', 'TK221', 'TK221L', 'TK132', 'TK123']

Если вы хотите отсортировать полученный список, используйте sorted метод:

exclusive = list(set(list_1) ^ set(list_2)) 
sorted(exclusive)
# returns ['TK1124B', 'TK123', 'TK123A', 'TK132', 'TK132P', 'TK221', 'TK221L']
Другие вопросы по тегам