There are various ways in which the difference between two lists can be generated. In this article, we will see the different ways to Get the difference between two lists which can be done using Python.
Examples:
Input: list1 = [10, 15, 20, 25, 30, 35, 40] list2 = [25, 40, 35] Output: [10, 20, 30, 15] Explanation: resultant list = list1 - list2
Note: When you have multiple same elements then this would not work. In that case, this code will simply remove the same elements.
In that case, you can maintain a count of each element in both lists.
Method 1: Use “in” to Find the Difference Between Two Lists in Python
In this example, we are using loop and Python in keyword to find the difference between two lists in Python.
Python3
li1
=
[
10
,
15
,
20
,
25
,
30
,
35
,
40
]
li2
=
[
25
,
40
,
35
]
temp3
=
[]
for
element
in
li1:
if
element
not
in
li2:
temp3.append(element)
print
(temp3)
Output:
[10, 15, 20, 30]
Method 2: Use set() to Find the Difference Between Two Lists in Python
Python3
li1
=
[
10
,
15
,
20
,
25
,
30
,
35
,
40
]
li2
=
[
25
,
40
,
35
]
s
=
set
(li2)
temp3
=
[x
for
x
in
li1
if
x
not
in
s]
print
(temp3)
Output :
[10, 15, 20, 30]
Method 3: Use a list comprehension and set to Find the Difference Between Two Lists in Python
In this method, we convert the lists into sets explicitly and then simply reduce one from the other using the subtract operator. For more references on set visit Sets in Python. It is a similar technique that we used previously. The only difference is, that we replaced the nested loops with the list comprehension syntax.
Python3
li1
=
[
10
,
15
,
20
,
25
,
30
,
35
,
40
]
li2
=
[
25
,
40
,
35
]
s
=
set
(li2)
temp3
=
[x
for
x
in
li1
if
x
not
in
s]
print
(temp3)
Output:
[10, 15, 20, 30]
Method 4: Without using the set()
In this method, we use the basic combination technique to copy elements from both lists with a regular check if one is present in the other or not.
Python3
def
Diff(li1, li2):
li_dif
=
[i
for
i
in
li1
+
li2
if
i
not
in
li1
or
i
not
in
li2]
return
li_dif
li1
=
[
10
,
15
,
20
,
25
,
30
,
35
,
40
]
li2
=
[
25
,
40
,
35
]
li3
=
Diff(li1, li2)
print
(li3)
Output :
[10, 15, 20, 30]
Method 5: Use Numpy to Find the Difference Between Two Lists in Python
The numpy.concatenate() function concatenate a sequence of arrays along an existing axis.
Python3
import
numpy as np
li1
=
np.array([
10
,
15
,
20
,
25
,
30
,
35
,
40
])
li2
=
np.array([
25
,
40
,
35
])
dif1
=
np.setdiff1d(li1, li2)
dif2
=
np.setdiff1d(li2, li1)
temp3
=
np.concatenate((dif1, dif2))
print
(
list
(temp3))
Output:
[10, 15, 20, 30]
Method 6: Use symmetric_difference to Find the Difference Between Two Lists in Python
The elements that are either in the first set or the second set are returned using the symmetric_difference() technique. The intersection, unlike the shared items of the two sets, is not returned by this technique.
Python3
li1
=
[
10
,
15
,
20
,
25
,
30
,
35
,
40
]
li2
=
[
25
,
40
,
35
]
set_dif
=
set
(li1).symmetric_difference(
set
(li2))
temp3
=
list
(set_dif)
print
(temp3)
Output:
[20, 10, 30, 15]
Last Updated :
03 Nov, 2022
Like Article
Save Article
В этом посте мы обсудим, как найти разницу между двумя списками в Python. Решение должно возвращать элементы, присутствующие в первом списке, но не во втором списке.
1. Использование set()
функция
Простое решение состоит в том, чтобы преобразовать оба списка, чтобы установить структуру данных, а затем вычислить разницу, используя -
оператор.
if __name__ == ‘__main__’: first = [2, 1, 3, 4, 1] second = [3, 4, 5] # Функция `set()` используется для создания наборов diff = list(set(first) – set(second)) print(diff) # печатает [1, 2] |
Скачать Выполнить код
2. Использование difference()
функция
Объект set также предлагает встроенную функцию difference()
, который возвращает новый набор с элементами первого набора, которых нет во втором наборе.
if __name__ == ‘__main__’: first = [2, 1, 3, 4, 1] second = [3, 4, 5] diff = list(set(first).difference(set(second))) print(diff) # печатает [1, 2] |
Скачать Выполнить код
3. Использование понимания списка
Оба приведенных выше решения не сохраняют исходный порядок элементов во входном списке. Также обратите внимание, что любые повторяющиеся записи в первом списке исключаются из выходного списка. Чтобы сохранить порядок и разрешить дубликаты, вы можете использовать понимание списка, как показано ниже:
if __name__ == ‘__main__’: first = [2, 1, 3, 4, 1] second = [3, 4, 5] diff = [x for x in first if x not in second] print(diff) # печатает [2, 1, 1] |
Скачать Выполнить код
Чтобы повысить производительность для больших списков, рассмотрите возможность преобразования второго списка в первый набор.
if __name__ == ‘__main__’: first = [2, 1, 3, 4, 1] second = [3, 4, 5] s = set(second) diff = [x for x in first if x not in s] print(diff) # печатает [2, 1, 1] |
Скачать Выполнить код
4. Поиск симметричной разницы
Наконец, если вам нужна симметричная разница между двумя наборами, вы можете использовать symmetric_difference()
функция или ^
оператор. Это вернет элементы в любом из списков, но не в обоих.
if __name__ == ‘__main__’: first = [2, 1, 3, 4, 1] second = [3, 4, 5] diff = list(set(first) ^ set(second)) print(diff) # печатает [1, 2, 5] |
Скачать Выполнить код
Это все, что касается поиска различий между двумя списками в Python.
- Используйте
set.difference()
, чтобы найти разницу между двумя списками в Python - Используйте
set.symmetric_difference()
, чтобы найти разницу между двумя списками в Python - Используйте ключевое слово
in
, чтобы найти разницу между двумя списками в Python - Используйте библиотеку
NumPy
, чтобы найти разницу между двумя списками в Python
Есть много операций, выполняемых со структурами данных, такими как списки, словари, кортежи и массивы. В Python эти структуры данных используются почти в каждой программе. Одна из этих структур данных – списки в Python. Списки в программировании на Python помогают хранить более одного элемента только в одной переменной. Выявление разницы между двумя списками – очень распространенная задача, которую выполняет почти каждый программист.
В этом руководстве будет продемонстрировано несколько способов различить два списка в Python.
Используйте set.difference()
, чтобы найти разницу между двумя списками в Python
Метод set()
помогает пользователю преобразовать любую итерацию в повторяемую последовательность, которая также называется набором. Итерируемые объекты могут быть списком, словарем или кортежем.
Функция set.difference()
используется для возврата разницы между двумя наборами. Эта функция в основном устраняет общие элементы в двух наборах.
list_1 = [5, 10, 15, 20, 25, 30]
list_2 = [10, 20, 30, 40, 50, 60]
difference_1 = set(list_1).difference(set(list_2))
difference_2 = set(list_2).difference(set(list_1))
list_difference = list(difference_1.union(difference_2))
print(list_difference)
Выход:
Для этого метода первым шагом является сохранение двух списков в двух переменных. Функция set()
используется для преобразования этих списков в наборы. На этом же шаге функция set.difference()
используется для определения разницы между двумя наборами. Обратите внимание, что переменная difference_1
получает элементы из list_1
, а не list_2
.
Переменная difference_2
получает элементы, которые находятся в list_2
, а не в list_1
. После этого функция union
используется для получения всех элементов из переменных difference_1
и difference_2
. Кроме того, функция list()
используется для повторного преобразования обоих наборов в списки. Наконец, распечатывается результирующий список.
Используйте set.symmetric_difference()
, чтобы найти разницу между двумя списками в Python
Здесь метод set()
используется для первоначального преобразования обоих списков в наборы.
Метод symmetric_difference()
используется для возврата элементов, которые находятся либо в первом наборе, либо во втором наборе. Этот метод не возвращает пересечение, как общие элементы двух наборов.
list_1 = [5, 10, 15, 20, 25, 30]
list_2 = [10, 20, 30, 40, 50, 60]
set_difference = set(list_1).symmetric_difference(set(list_2))
list_difference = list(set_difference)
print(list_difference)
Выход:
Метод set()
также используется для преобразования списков в наборы. После получения разницы функция list()
используется для получения и преобразования окончательного набора, как преобразование set_difference
обратно в список.
Используйте ключевое слово in
, чтобы найти разницу между двумя списками в Python
Ключевое слово in
помогает проверить, присутствует ли элемент в повторяющейся последовательности, такой как список, или нет.
В этом методе также используется функция append()
. append()
используется для добавления элементов в существующий список; он не создает новый список, но изменяет исходный список, добавляя в него элементы.
list_1 = [5, 10, 15, 20, 25, 30]
list_2 = [10, 20, 30, 40, 50, 60]
list_difference = []
for element in list_1:
if element not in list_2:
list_difference.append(element)
print(list_difference)
Выход:
В этом методе мы сначала инициализируем окончательный список, который должен быть напечатан с нулевыми элементами. Затем мы используем цикл for, чтобы начать итерацию с первым списком, которым является list_1
. После этого мы используем ключевое слово not in
, чтобы проверить, находится ли элемент во втором списке или нет.
Наконец, мы используем метод append()
для добавления элементов, которых нет во втором списке, в исходный список, то есть list_difference
. Однако недостатком этого метода является то, что он не возвращает элементы из второго списка.
Чтобы упростить этот метод, используйте понимание списка. Понимание списка – это метод, который помогает создать новый список с элементами существующего списка.
list_1 = [5, 10, 15, 20, 25, 30]
list_2 = [10, 20, 30, 40, 50, 60]
list_difference = [element for element in list_1 if element not in list_2]
print(list_difference)
Выход:
Используйте библиотеку NumPy
, чтобы найти разницу между двумя списками в Python
Библиотека Python NumPy
– очень часто используемая библиотека. Эта библиотека помогает пользователю выполнять задачи с массивами, матрицами и линейной алгеброй.
В этом методе используются три функции библиотеки NumPy
для получения разницы между двумя списками. Этими тремя функциями являются np.array()
, np.setdiff1d()
и np.concatenate()
.
Массив – это основная структура данных библиотеки NumPy
. Функция np.array()
помогает создавать массивы и помогает в работе с ними.
Функция np.setdiff1d()
помогает вам найти установленную разницу между двумя массивами и вернуть значения, которые находятся в первом массиве, а не во втором массиве.
Функция np.concatenate
используется для объединения двух или более массивов NumPy
вместе. Посмотрите пример ниже:
import numpy as np
list_1 = [5, 10, 15, 20, 25, 30]
list_2 = [10, 20, 30, 40, 50, 60]
array_1 = np.array(list_1)
array_2 = np.array(list_2)
difference_1 = np.setdiff1d(array_1, array_2)
difference_2 = np.setdiff1d(array_2, array_1)
list_difference = np.concatenate((difference_1, difference_2))
print(list(list_difference))
Выход:
В этой статье мы разберемся с различными способами сравнения двух списков в Python. Мы часто сталкиваемся с ситуациями, когда нам нужно сравнить значения элементов данных, хранящихся в любой структуре, например, в списке, кортеже, строке и т.д.
Сравнение – это метод проверки элементов данных одного списка на предмет равенства с элементами данных другого списка.
Содержание
- Методы сравнения двух списков
- 1. Функции Python reduce() и map()
- 2. Метод Python collection.counter()
- 3. Метод Python sort() и оператор ==
- 4. Метод Python set() и оператор ==
- 5. Понимание пользовательского списка
Методы сравнения двух списков
Мы можем использовать любой из следующих методов для сравнения:
- Функции reduce() и map().
- Функция collection.counter().
- sort() вместе с оператором ==.
- set() вместе с оператором ==.
- Функция difference().
1. Функции Python reduce() и map()
Мы можем использовать функцию map() вместе с функцией functools.reduce() для сравнения элементов данных двух списков.
Метод map() принимает в качестве аргументов функцию и итерацию, например список, кортеж, строку и т.д.
Он применяет переданную функцию к каждому элементу итерации, а затем возвращает объект карты, то есть итератор, в качестве результата.
Метод functools.reduce() применяет переданную функцию к каждому элементу итерируемого ввода рекурсивным образом.
Первоначально он применит функцию к первому и второму элементам и вернет результат. Тот же процесс будет продолжаться для каждого из элементов, пока в списке не останется элементов.
Как комбинация, функция map() применяет функцию ввода к каждому элементу, а функция reduce() гарантирует, что она применяет функцию последовательно.
Пример:
import functools l1 = [10, 20, 30, 40, 50] l2 = [10, 20, 30, 50, 40, 70] l3 = [10, 20, 30, 40, 50] if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l2), True): print ("The lists l1 and l2 are the same") else: print ("The lists l1 and l2 are not the same") if functools.reduce(lambda x, y : x and y, map(lambda p, q: p == q,l1,l3), True): print ("The lists l1 and l3 are the same") else: print ("The lists l1 and l3 are not the same")
Выход:
The lists l1 and l2 are not the same The lists l1 and l3 are the same
2. Метод Python collection.counter()
Метод collection.counter() можно использовать для эффективного сравнения списков. Функция counter() подсчитывает частоту элементов в списке и сохраняет данные в виде словаря в формате <значение>: <частота>.
Если два списка имеют одинаковый вывод словаря, мы можем сделать вывод, что списки одинаковы.
Примечание. Порядок в списке не влияет на метод counter().
Пример:
import collections l1 = [10, 20, 30, 40, 50] l2 = [10, 20, 30, 50, 40, 70] l3 = [10, 20, 30, 40, 50] if collections.Counter(l1) == collections.Counter(l2): print ("The lists l1 and l2 are the same") else: print ("The lists l1 and l2 are not the same") if collections.Counter(l1) == collections.Counter(l3): print ("The lists l1 and l3 are the same") else: print ("The lists l1 and l3 are not the same")
Выход:
The lists l1 and l2 are not the same The lists l1 and l3 are the same
3. Метод Python sort() и оператор ==
Мы можем объединить метод sort() с оператором == для сравнения двух списков.
Метод sort() используется для сортировки входных списков с целью, что если два входных списка равны, то элементы будут находиться в одних и тех же позициях индекса.
Примечание. Порядок в списке не влияет на этот метод, потому что мы будем сортировать списки перед сравнением.
Кроме того, оператор == используется для сравнения списка элемент за элементом.
Пример:
import collections l1 = [10, 20, 30, 40, 50] l2 = [10, 20, 30, 50, 40, 70] l3 = [50, 10, 30, 20, 40] l1.sort() l2.sort() l3.sort() if l1 == l3: print ("The lists l1 and l3 are the same") else: print ("The lists l1 and l3 are not the same") if l1 == l2: print ("The lists l1 and l2 are the same") else: print ("The lists l1 and l2 are not the same")
Выход:
The lists l1 and l3 are the same The lists l1 and l2 are not the same
4. Метод Python set() и оператор ==
Метод set() манипулирует элементами данных итерации до отсортированного набора элементов данных, не принимая во внимание порядок элементов.
Кроме того, оператор == используется для поэлементного сравнения элементов данных списка.
Пример:
l1 = [10, 20, 30, 40, 50] l3 = [50, 10, 30, 20, 40] a = set(l1) b = set(l3) if a == b: print("Lists l1 and l3 are equal") else: print("Lists l1 and l3 are not equal")
Выход:
Lists l1 and l3 are equal
Мы можем использовать List в Python для сравнения двух списков.
Пример:
l1 = [10, 20, 30, 40, 50] l3 = [50, 75, 30, 20, 40, 69] res = [x for x in l1 + l3 if x not in l1 or x not in l3] print(res) if not res: print("Lists l1 and l3 are equal") else: print("Lists l1 and l3 are not equal")
В приведенном выше коде мы устанавливаем элемент указателя «x» на список l1 и l3. Далее мы проверяем, присутствует ли элемент, на который указывает элемент-указатель, в списках.
Выход:
[10, 75, 69] Lists l1 and l3 are not equal
Имеется три списка: список1
, список2
и список3
.
Известно, что список1 > список2
(по количеству элементов), а список3
– пустой.
Также известно, что первые элементы список1
и список2
одинаковые (например, список1 = [Вася, Петя, Маша, Саша]
, а список2 = [Вася, Петя]
).
Задача: заполнить список3
разностью первого и второго списков, т.е. на приведённом примере список3 = [Маша, Саша]
.
задан 22 июл 2011 в 12:08
IzengardjkeIzengardjke
5221 золотой знак6 серебряных знаков23 бронзовых знака
1
Навскидку (т.к. set, элементы на выходе будут уникальными, т.е. без повторений) + не важно какие индексы у элементов, которые есть в обоих списках:
list1 = [u'Вася', u'Петя', u'Маша', u'Саша']
list2 = [u'Вася', u'Петя']
list3=list(set(list1)-set(list2))
print list3
[u'Маша', u'Саша']
ответ дан 22 июл 2011 в 12:24
1
Используйте Set. Вот пример из документации.
>>> from sets import Set
>>> engineers = Set(['John', 'Jane', 'Jack', 'Janice'])
>>> programmers = Set(['Jack', 'Sam', 'Susan', 'Janice'])
>>> managers = Set(['Jane', 'Jack', 'Susan', 'Zack'])
>>> employees = engineers | programmers | managers # union
>>> engineering_management = engineers & managers # intersection
>>> fulltime_management = managers - engineers - programmers # difference
difference – это и будет разница
UPD:
Опередили меня. 🙂
ответ дан 22 июл 2011 в 12:26
- Заведомо известно, что список 1 > список2
- Также известно, что первые элементы список1 и список2 одинаковые
Если выполнение этих условий гарантируется, то самым простым и самым быстрым будет решение:
list3 = list1[len(list2):]
ответ дан 22 июл 2011 в 13:31
Ilya PirogovIlya Pirogov
10.9k1 золотой знак20 серебряных знаков29 бронзовых знаков
1
Что-то вроде этого:
list1 = ['1', '2', '3',]
list2 = ['1', '3',]
for item in list2:
if item in list1:
list1.remove(item)
#Искомый - list1
Я правильно понял ваш вопрос? Тут только вычёркивание элементов второго списка из первого.
ответ дан 22 июл 2011 в 12:32
metazetmetazet
2,7582 золотых знака17 серебряных знаков26 бронзовых знаков
2
Для этого в python есть специальный ТД “множество” – set. С ним все делается просто и легко.
list1 = ['Вася', 'Петя', 'Маша', 'Саша']
list2 = ['Вася', 'Петя']
set1 = set(list1)
set2 = set(list2)
list3 = list( set1.difference(set2) )
ответ дан 3 авг 2011 в 18:31
fogbitfogbit
3,44611 серебряных знаков9 бронзовых знаков
>>> lst1 = ['Вася', 'Петя', 'Маша', 'Саша']
>>> lst2 = ['Вася', 'Петя']
>>> lst3 = [i for i in lst1 if i not in lst2]
>>> lst3
['Маша', 'Саша']
>>>
а множества не гарантируют сохранение порядка элементов
может получиться
['Саша', 'Маша']
ответ дан 23 июл 2011 в 3:03
adjustadjust
512 бронзовых знака