Я пытаюсь сравнить 2 разных списка и найти различия между ними. Скажем, например, у меня есть list 1
, который состоит из cat,dog,whale,hamster
, и список 2, который состоит из dog,whale,hamster
. Как мне сравнить эти два, а затем присвоить переменную разнице, которая в данном случае равна cat
. Однако порядок не имеет значения, если имеется более одного различия, каждое из этих различий должно быть присвоено отдельной переменной.
В моем реальном коде я сравниваю html, который состоит из тысяч строк, поэтому я бы предпочел что-то как можно быстрее, но любой ценится :)
Если есть несколько значений в качестве разницы, ожидаете ли вы, что несколько переменных присвоят каждой переменной значение.
str1 = 'cat,dog,whale,hamster'
str2 = 'dog,whale,hamster'
Измените строки на наборы Python:
set1 = set(str1.split(','))
set2 = set(str2.split(','))
Получите разницу:
result = set1 - set2
Что печатает:
{'cat'}
Вы можете преобразовать его в список или строку:
result_as_list = list(result)
result_as_string = ','.join(result)
Это решение работает до тех пор, пока значения входной строки уникальны (в пределах одной строки).
Если ваши списки могут содержать дубликаты или вам нужно знать элементы, которые есть только в одном из двух списков, вы можете использовать Counter (из модуля collections):
list1 = ['cat','dog','whale','hamster','dog']
list2 = ['dog','whale','hamster','cow','horse']
from collections import Counter
c1,c2 = Counter(list1),Counter(list2)
differences = [*((c1-c2)+(c2-c1)).elements()]
print(differences) # ['cat', 'dog', 'cow', 'horse']
Вот как ты собираешься это сделать. Определенная здесь функция напечатает разницу между двумя списками.
def Diff(list1, list2):
li_dif = [i for i in list1 + list2 if i not in list1 or i not in list2]
return li_dif
# Driver Code
list1 = ['cat','dog','whale','hamster']
list2 = ['dog','whale','hamster']
diff = Diff(list1, list2)
print(diff)
выход:
['cat']
здесь cat
генерируется переменной diff
Теперь, если есть более одного различия, следующим образом:
def Diff(list1, list2):
li_dif = [i for i in list1 + list2 if i not in list1 or i not in list2]
return li_dif
# Driver Code
list1 = ['cat','dog','whale','hamster','ostrich','yak','sheep','lion','tiger']
list2 = ['dog','whale','hamster']
diff = Diff(list1, list2)
print(diff)
вывод будет:
['cat','ostrich','yak','sheep','lion','tiger']
Ваш вопрос заключается в том, что если существует более одного различия, каждое из этих различий должно быть присвоено отдельной переменной.
для этого мы будем рассматривать печатный элемент как список, давайте назовем его list3
diff==list3
вот, list3=['cat','ostrich','yak','sheep','lion','tiger']
Здесь всего 6 элементов списка, каждому из них мы можем присвоить переменную следующим образом:
v1=list3[0]
v2=list3[1]
v3=list3[2]
v4=list3[3]
v5=list3[4]
v6=list3[5]
вам нужно быть более точным в отношении того, что вы подразумеваете под «разницей». Например. порядок имеет значение? Если бы
list
было['whale', 'cat','hamster','dog']
, ответ был бы таким же?