Сравнение двух списков в 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']