Как найти одинаковые элементы в двух списках python
Перейти к содержимому

Как найти одинаковые элементы в двух списках python

  • автор:

Проверить уникальность элементов списка

В списке чисел проверить, все ли элементы являются уникальными, то есть встречается ли каждое число только один раз.

Решение задачи на языке программирования Python

Решить данную задачу на языке Python можно несколькими способами. Классический вариант — брать по очереди элементы списка и сравнить каждый со стоящими за ним. При первом же совпадении элементов делается вывод, что в списке есть одинаковы элементы и работа программы завершается.

Еще одним способом решения может быть использование типа данных «множества» ( set ). Как известно, в множествах не может быть одинаковых элементов. При преобразовании списка во множество в нем одинаковые элементы будут представлены единожды, то есть дубли удалятся. Если после этого сравнить длину исходного списка и множества, то станет ясно, есть ли в списке одинаковые элементы. Если длины совпадают, значит все элементы списка уникальны. Если нет, значит, были одинаковые элементы.

Допустим, исходный список генерируется таким кодом:

from random import random N = 10 arr = [0] * N for i in range(N): arr[i] = int(random() * 50) print(arr)

Пример решения классическим способом:

for i in range(N-1): for j in range(i+1, N): if arr[i] == arr[j]: print("Есть одинаковые") quit() print("Все элементы уникальны")

Здесь j принимает значения от следующего элемента за тем, для которого ищется совпадение, до последнего в списке. Сравнивать элемент с индексом i с элементами, стоящими впереди него, не надо, т. к. эти сравнения уже выполнялись на предыдущих итерациях внешнего цикла.

Решение задачи с помощью множества:

setarr = set(arr) if len(arr) == len(setarr): print("Все элементы уникальны") else: print("Есть одинаковые")

Функция set преобразует список во множество.

Примеры выполнения кода:

[2, 4, 1, 2, 45, 38, 26, 11, 49, 25] Есть одинаковые
[44, 49, 21, 19, 23, 27, 34, 9, 41, 31] Все элементы уникальны

В Python у списков есть метод count , который подсчитывает количество элементов списка, чьи значения совпадают с переданным в метод значением. Таким образом мы можем решить задачу, перебирая элементы списка и передавая каждый в метод count(item) . Если хотя бы однажны метод вернет число больше 1, значит в списке имеются повторы значений.

from random import randrange N = 10 arr = [randrange(50) for i in range(N)] print(*arr) for item in arr: if arr.count(item) > 1: print("Есть одинаковые") break else: print("Все элементы уникальны")

В программе выше ветка else цикла for срабатывает только в случае, если работа цикла не была прервана с помощью оператора break .

В более сложном варианте данной задачи может требоваться определить неуникальные элементы, то есть выявить значения, которые встречаются в списке более одного раза, а не просто сказать, есть повторы или нет. Здесь мы не можем использовать прерывание цикла, так как в списке может повторяться и другое значение. Также не можем для всех элементов списка вызывать count() , так как в этом случае метод будет вызываться повторно для уже учтенных ранее значений. Например, результат работы такой программы

from random import randrange N = 10 arr = [randrange(50) for i in range(N)] print(*arr) for item in arr: count = arr.count(item) if count > 1: print(f"Элемент встречается раз") 

может выглядеть так:

9 36 43 21 48 6 19 13 3 48 Элемент 48 встречается 2 раз Элемент 48 встречается 2 раз

Чтобы исключить из перебора повторы значений, мы можем преобразовать список во множество. После этого перебирать в цикле элементы множества, которые уникальны.

from random import randrange N = 10 arr = [randrange(50) for i in range(N)] print(*arr) setarr = set(arr) for item in setarr: count = arr.count(item) if count > 1: print(f"Элемент встречается раз")

X Скрыть Наверх

Решение задач на Python

Как можно посчитать количество одинаковых элементов в списке Python

Продолжаем разговаривать про списки в Python и про то как с ними работать, я сторонник того что информация в небольших объемах воспринимается и усваивается намного лучше, поэтому и пишу небольшие статьи их можно даже назвать заметками. Сегодня поговорим о том как можно посчитать количество одинаковых элементов в списке. Делается это достаточно просто, в принципе как и все в языке программирования Python) Для решения этой задачи потребуется метод count(). Рассмотрим его применение на самом простом примере.

Поиск и подсчет количества одинаковых элементов в списке

И так допустим у нас есть какой-то список, и нам бы очень хотелось не только найти одинаковые элементы но и посчитать их количество.

numbers = [1, 2, 5, 55, 68, 88, 89,1, 2, 5, 55, 68, 88, 891, 2, 5, 55, 68, 88, 89,]
print(numbers)

Список состоит из цифр и выглядит следующим образом.

Как можно посчитать количество одинаковых элементов в списке Python

Для того чтобы посчитать количество одинаковых элементов нужно дописать всего одну строчку. Создать переменную в которую с помощью метода count будет помещаться количество найденных одинаковых элементов, для того чтобы увидеть результат выведем его на экран.

numbers = [1, 2, 5, 55, 68, 88, 89,1, 2, 5, 55, 68, 88, 891, 2, 5, 55, 68, 88, 89,] print(numbers) conunt = numbers.count(int('2')) print(conunt) 

Проверим результат, как видим все правильно цифра «2» встречается в нашем списке «3» раза.

Поиск и подсчет количества одинаковых элементов в списке

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

Найти общие элементы двух массивов.

Author24 — интернет-сервис помощи студентам

Общие элементы двух списков
В общем, пользователь должен ввести 2 любых числа, а программа должна найти общие цифры в их.

Общие элементы двух списков
Есть два списка. Надо выбрать оттуда одинаковые элементы, объединив их попарно. Задача несложная.

Найти общие цифры, входящие в запись двух чисел
Смотрите, я написал программу, но проблема в том , что в нем нет исключения: print(‘программа для.

Найти общие элементы двух массивов
Даны два линейных массива x и y по N целых чисел в каж-дом (N=10). Найти такие значения элементов.

Автоматизируй это!

Эксперт Python

7097 / 4601 / 1213
Регистрация: 30.03.2015
Сообщений: 13,211
Записей в блоге: 29

Лучший ответ

Сообщение было отмечено chunghuixd как решение

Решение

chunghuixd,

1 2 3 4
>>> first = [1,2,3] >>> second = [3,4,5] >>> print(set(first) & set (second)) {3}

Регистрация: 24.03.2020
Сообщений: 24

благодарю. Можешь помочь? У меня Python 3.6 показывает черный экран и только. Даже надписей нету никаких

Автоматизируй это!

Эксперт Python

7097 / 4601 / 1213
Регистрация: 30.03.2015
Сообщений: 13,211
Записей в блоге: 29

ЦитатаСообщение от chunghuixd Посмотреть сообщение

У меня Python 3.6 показывает черный экран и только. Даже надписей нету никаких

питон не может ничего показывать вообще, это язык программирования
о чем речь? про консоль? какую то программу?

Регистрация: 24.03.2020
Сообщений: 24

Вот такое мне выдает. Не пойму в чем проблема. Вообще ничего не выдает. Пустой экран. Даже начальных записей нет. Консоль не работает даже. Ввести что-либо уже проблема.

Автоматизируй это!

Эксперт Python

7097 / 4601 / 1213
Регистрация: 30.03.2015
Сообщений: 13,211
Записей в блоге: 29

chunghuixd, ты зачем питон так запускаешь? если нормально его установил то используй ИДЕ (программу для написания кода), лучшая -PyCharm Community она бесплатна

Добавлено через 2 минуты
и установил ты его как то странно, через магазин винды чтоли?

снеси нынешний питон
создай папку c:\python
скачай питон с сайта для своей ОС (важно! если 64 бит ОС то и инсталлер такой бери)
установи в папку выше не забыв поставить галочку PATH

Регистрация: 24.03.2020
Сообщений: 24

Ок, учту. Не сталкивались ли вы с такой ошибкой ? Как решили?

Добавлено через 28 секунд
Да, через магаз винды.

Автоматизируй это!

Эксперт Python

7097 / 4601 / 1213
Регистрация: 30.03.2015
Сообщений: 13,211
Записей в блоге: 29

ЦитатаСообщение от chunghuixd Посмотреть сообщение

? Как решили?
я вон выше написал тебе как сделать по-питонски
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Найти общие элементы двух массивов из 10 элементов
program prog5_4; const N = 10; type vector = array of integer; var x, y, m.

Найти общие элементы двух целочисленных массивов и отсортировать их по возрастанию
добрый вечер, может кто-нить подсказать как найти общие элементы двух целочисленных массивов и.

Общие элементы двух массивов
Есть два массива, 1-ий — на 10 элементов, 2-ой – на 20 элементов. — найти все одинаковые числа.

Общие элементы двух массивов
Можете помочь с вопросом , как найти общие элементы этих массивов? Пусть есть массивы int h4.

Общие элементы двух массивов
Помогите решить проблему, всю голову поломал себе уже. Вообщем нужно найти общие элементы из двух.

Собрать общие элементы двух массивов
Задание: Даны два массива: А и B (M и N вводятся с клавиатуры). Необходимо создать третий массив.

Cкопировать общие элементы двух массивов
Условие: Программа должна создать два статических массива со случайными элементами из диапазона .

Или воспользуйтесь поиском по форуму:

Пересечение списков, совпадающие элементы двух списков

В данной задаче речь идет о поиске элементов, которые присутствуют в обоих списках. При этом пересечение списков и поиск совпадающих (перекрывающихся) элементов двух списков будем считать несколько разными задачами.

Если даны два списка, в каждом из которых каждый элемент уникален, то задача решается просто, так как в результирующем списке не может быть повторяющихся значений. Например, даны списки:

[5, 4, 2, ‘r’, ‘ee’] и [4, ‘ww’, ‘ee’, 3]

Областью их пересечения будет список [4, ‘ee’] .

Если же исходные списки выглядят так:

[5, 4, 2, ‘r’, 4, ‘ee’, 4] и [4, ‘we’, ‘ee’, 3, 4] ,

то списком их совпадающих элементов будет [4, ‘ee’, 4] , в котором есть повторения значений, потому что в каждом из исходных списков определенное значение встречается не единожды.

Начнем с простого — поиска области пересечения. Cначала решим задачу «классическим» алгоритмом, не используя продвинутые возможностями языка Python: будем брать каждый элементы первого списка и последовательно сравнивать его со всеми значениями второго.

a = [5, [1, 2], 2, 'r', 4, 'ee'] b = [4, 'we', 'ee', 3, [1, 2]] c = [] for i in a: for j in b: if i == j: c.append(i) break print(c)

Результат выполнения программы:

[[1, 2], 4, 'ee']

Берется каждый элемент первого списка (внешний цикл for ) и последовательно сравнивается с каждым элементом второго списка (вложенный цикл for ). В случае совпадения значений элемент добавляется в третий список c . Команда break служит для выхода из внутреннего цикла, так как в случае совпадения дальнейший поиск при данном значении i бессмыслен.

Алгоритм можно упростить, заменив вложенный цикл на проверку вхождения элемента из списка a в список b с помощью оператора in :

a = [5, [1, 2], 2, 'r', 4, 'ee'] b = [4, 'we', 'ee', 3, [1, 2]] c = [] for i in a: if i in b: c.append(i) print(c)

Здесь выражение i in b при if по смыслу не такое как выражение i in a при for . В случае цикла оно означет извлечение очередного элемента из списка a для работы с ним в новой итерации цикла. Тогда как в случае if мы имеем дело с логическим выражением, в котором утверждается, что элемент i есть в списке b . Если это так, и логическое выражение возвращает истину, то выполняется вложенная в if инструкция, то есть элемент i добавляется в список c .

Принципиально другой способ решения задачи – это использование множеств. Подходит только для списков, которые не содержат вложенных списков и других изменяемых объектов, так как встроенная в Python функция set() в таких случаях выдает ошибку.

a = [5, 2, 'r', 4, 'ee'] b = [4, 1, 'we', 'ee', 'r'] c = list(set(a) & set(b)) print(c)
['ee', 4, 'r']

Выражение list(set(a) & set(b)) выполняется следующим образом.

  1. Сначала из списка a получают множество с помощью команды set(a) .
  2. Аналогично получают множество из b .
  3. С помощью операции пересечения множеств, которая обозначается знаком амперсанда & , получают третье множество, которое представляет собой область пересечения двух исходных множеств.
  4. Полученное таким образом третье множество преобразуют обратно в список с помощью встроенной в Python функции list() .

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

Преобразование списков во множества с удалением повторяющихся значений

Однако если мы вернемся к решению задачи без использования множеств и добавим в первый список повтор значения, то получим некорректный результат:

Попадание в пересечение списков повторяющегося значения

В список пересечения попадают оба равных друг другу значения из первого списка. Это происходит потому, что когда цикл извлекает, в данном случае, вторую 4-ку из первого списка, выражение i in b также возвращает истину, как и при проверке первой 4-ки. Следовательно, выражение c.append(i) выполняется и для второй четверки.

Чтобы решить эту проблему, добавим дополнительное условие в заголовок инструкии if . Очередной значение i из списка a должно не только присутствовать в b , но его еще не должно быть в c . То есть это должно быть первое добавление такого значения в c :

a = [5, 2, 'r', 4, 'ee', 4] b = [4, 'we', 'ee', 3] c = [] for i in a: if i in b and i not in c: c.append(i) print(c)
[4, 'ee']

Теперь усложним задачу. Пусть если в обоих списках есть по несколько одинаковых значений, они должны попадать в список совпадающих элементов в том количестве, в котором встречаются в списке, где их меньше. Или если в исходных списках их равное количетво, то такое же количество должно быть в третьем. Например, если в первом списке у нас три 4-ки, а во втором две, то в третьем списке должно быть две 4-ки. Если в обоих исходных по две 4-ки, то в третьем также будет две.

Алгоритмом решения такой задачи может быть следующий:

  1. В цикле будем перебирать элементы первого списка.
  2. Если на текущей итерации цикла взятого из первого списка значения нет в третьем списке, то только в этом случае следует выполнять все нижеследующие действия. В ином случае такое значение уже обрабатывалось ранее, и его повторная обработка приведет к добавлению лишних элементов в результирующий список.
  3. С помощью спискового метода count() посчитаем количество таких значений в первом и втором списке. Выберем минимальное из них.
  4. Добавим в третий список количество элементов с текущим значением, равное ранее определенному минимуму.
a = [5, 2, 4, 'r', 4, 'ee', 1, 1, 4] b = [4, 1, 'we', 'ee', 'r', 4, 1, 1] c = [] for item in a: if item not in c: a_item = a.count(item) b_item = b.count(item) min_count = min(a_item, b_item) # c += [item] * min_count for i in range(min_count): c.append(item) print(c)
[4, 4, 'r', 'ee', 1, 1]

Если значение встречается в одном списке, но не в другом, то метод count() другого вернет 0. Соответственно, функция min() вернет 0, а цикл с условием i in range(0) не выполнится ни разу. Поэтому, если значение встречается в одном списке, но его нет в другом, оно не добавляется в третий.

При добавлении значений в третий список вместо цикла for можно использовать объединение списков с помощью операции + и операцию повторения элементов с помощью * . В коде выше данный способ показан в комментарии.

X Скрыть Наверх

Решение задач на Python

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *