Количество элементов в списке Python с условиями или критериями
В этом посте мы рассмотрим, как узнать число элементов в списке Python, удовлетворяющих определенным условиям или критериям.
Если вам просто нужно найти количество конкретных элементов с списке, используйте метод .count()
>>> list_numbers = [1, 2, 2, 5, 5, 7, 4, 2, 1] >>> print(list_numbers.count(2)) 3Существует несколько способов такого подсчета, и мы изучим каждый из них с помощью примеров. Итак, давайте начнем.
1. Использование цикла for для подсчета в списке Python
В этом фрагменте кода мы используем цикл for для подсчета элементов списка Python, удовлетворяющих условиям или критериям. Мы перебираем каждый элемент списка и проверяем условие, если оно истинно, то мы увеличиваем счетчик на 1. Это простой процесс сопоставления и подсчета для получения интересующего нас количества.
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20] count = 0 for item in list_numbers: if item%5 == 0: count += 1 print("количество элементов списка, удовлетворяющих заданному условию:", count)количество элементов списка, удовлетворяющих заданному условию: 62. Применение len() со списковыми включениями для подсчета в списке Python
В представленном ниже фрагменте кода, мы используем списковые включения (list comprehension), чтобы создать новый список, элементы которого соответствует заданному условию, после чего мы получаем длину собранного списка. Это намного легче понять на примере, поэтому давайте перейдем к нему.
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20] element_count = len([item for item in list_numbers if item%5 == 0]) print( "количество элементов списка, удовлетворяющих заданному условию:", element_count )количество элементов списка, удовлетворяющих заданному условию: 6Подсчет ненулевых элементов
В этом примере мы находим общее количество ненулевых элементов. Чтобы узнать число нулевых членов списка, мы можем просто изменить условие на if item == 0 .
list_numbers = [78, 99, 66, 44, 50, 30, 45, 0, 0, 0] element_count = len([item for item in list_numbers if item != 0]) print( "количество элементов списка, удовлетворяющих заданному условию:", element_count )количество элементов списка, удовлетворяющих заданному условию: 73. sum() и выражение-генератор для подсчета в списке Python
В этом примере кода мы используем sum() с генераторным выражением. Каждый элемент списка проходит проверку условием и для тех элементов, которые ему удовлетворяют, возвращается значение True . Метод sum() в свою очередь подсчитывает общее число истинных значений.
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20] count = 0 count = sum(True for i in list_numbers if i % 5 == 0) print( "количество элементов списка, удовлетворяющих заданному условию:", count )количество элементов списка, удовлетворяющих заданному условию: 64. sum() и map() для подсчета элементов списка Python с условиями или критериями
Функция map(fun, iterable) принимает два аргумента: итерируемый объект (это может быть строка, кортеж, список или словарь) и функцию, которая применяется к каждому его элементу, — и возвращает map-объект (итератор). Для применения одной функции внутри другой идеально подходит лямбда-функция. Таким образом, map() примет первый аргумент в виде лямбда-функции.
Здесь sum() используется с функцией map() , чтобы получить количество всех элементов списка, которые делятся на 5.
Давайте разберемся на примере, в котором переданная лямбда-функция предназначена для фильтрации членов списка, не кратных 5.
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20] count = 0 count = sum(map(lambda item: item % 5 == 0, list_numbers)) print( "количество элементов списка, удовлетворяющих заданному условию:", count )количество элементов списка, удовлетворяющих заданному условию: 65. reduce() с лямбда-функцией для подсчета элементов списка Python с условием или критериями
Lambda — это анонимная (без имени) функция, которая может принимать много параметров, но тело функции должно содержать только одно выражение. Лямбда-функции чаще всего применяют для передачи в качестве аргументов в другие функции или для написания более лаконичного кода. В этом примере мы собираемся использовать функции sum() , map() и reduce() для подсчета элементов в списке, которые делятся на 5.
Приведенный ниже код наглядно демонстрирует это.
from functools import reduce list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20] result_count = reduce( lambda count, item: count + (item % 5 == 0), list_numbers, 0 ) print( "количество элементов списка, удовлетворяющих заданному условию:", result_count )количество элементов списка, удовлетворяющих заданному условию: 6Надеюсь, что вы узнали о различных подходах к подсчету элементов в списке Python с помощью условия или критериев для фильтрации данных.
Сравнение 2-ух списков в python
Нужно сравнить два списка и совпадающие элементы вывести в отдельный список,скажем, result. Такой вопрос уже был, но я никак не могу понять как одинаковые элементы вывести.
Отслеживать
51.2k 86 86 золотых знаков 266 266 серебряных знаков 505 505 бронзовых знаков
задан 3 июн 2015 в 17:58
143 1 1 золотой знак 4 4 серебряных знака 11 11 бронзовых знаков
похожий вопрос: Compare lists to find common elements in python
4 июн 2015 в 19:482 ответа 2
Сортировка: Сброс на вариант по умолчанию
Все таки Python динамичен и выразителен. Этого у него не отнять.
Вот Ваш однострочник:
result=list(set(Ans) & set(Word))Это даст пересечение обоих списков:
['red', 'white']Если нужен список уникальных элементов в объединении двух списков:
['red', 'white', 'green', 'blue'] result = list(set(Ans + Word))['green','blue'] result=list(set(Ans) ^ set(Word))Обычная разность(Множество из Ans не входящее в Word ):
['green','blue'] result=list(set(Ans) - set(Word))Вариант, сохраняющий порядок с меньшим количеством конверсий типов:
sbuf = set(Word) result = [x for x in Ans if x in sbuf)]Отслеживать
ответ дан 3 июн 2015 в 18:24
7,786 1 1 золотой знак 28 28 серебряных знаков 49 49 бронзовых знаков
Спасибо за исчерпывающий ответ, принял.
4 июн 2015 в 15:44@ламер: Для поддержки повторяющихся значений можно collections.Counter вместо set использовать. Нужно быть осторожно с выражениями типа: x in set(Word) оно создаёт множество заново для каждого элемента (можно просто вывести создание множества из цикла). В последнем выражении result может дубликаты содержать и сам результат не симметричен. Нет никакой необходимости преобразовывать set() в list() обратно: порядок и повторные элементы уже потеряны: result = set(Ans).intersection(Word) (здесь также не нужно второе множество создавать). Для полноты хэширование стоит упомянуть.
Поиск пересечения двух списков в Python – 5 способов
В этом уроке мы обсудим, как мы можем получить пересечение двух списков в Python. Пересечение двух списков означает, что нам нужно добавить все знакомые элементы в оба начальных списка.
Python известен своей превосходной встроенной структурой данных. Список Python – один из самых известных и ценных встроенных типов данных. Он может хранить значения различных типов данных в отсортированном порядке. Однако для списков, таких как наборы, нет встроенной функции.
list1 = [40, 90, 11, 58, 31, 66, 28, 54, 79] list2 = [58, 90, 54, 31, 45, 11, 66, 28, 26][90, 11, 58, 31, 66, 28, 54]list1 = [4, 9, 1, 17, 11, 26, 28, 54, 69] list2 = [9, 9, 74, 21, 45, 11, 63, 28, 26][9, 11, 26, 28]Давайте рассмотрим следующие способы, чтобы получить пересечение двух списков.
Способ 1: использование цикла for
# Python program to get the intersection # of two lists in most simple way def intersection_list(list1, list2): list3 = [value for value in list1 if value in list2] return list3 # Driver Code list1 = [40, 90, 11, 58, 31, 66, 28, 54, 79] list2 = [58, 90, 54, 31, 45, 11, 66, 28, 26] print(intersection_list(list1, list2))[90, 11, 58, 31, 66, 28, 54]Мы использовали цикл for, чтобы получить общее значение из обоих списков и сохранить его в переменной list3.
Способ 2: преобразование списка в набор
def intersection_list(list1, list2): return list(set(list1) & set(list2)) list1 = [40, 90, 11, 58, 31, 66, 28, 54, 79] list2 = [58, 90, 54, 31, 45, 11, 66, 28, 26] print(intersection_list(list1, list2))[66, 90, 11, 54, 58, 28, 31]Способ – 3: с помощью метода intersection()
Мы воспользуемся встроенным методом intersection(). intersection() – это первоклассная часть множества. Давайте разберемся в следующем примере.
# Python program to get the intersection # of two lists using set() and intersection() def intersection_list(list1, list2): return set(list1).intersection(list2) list1 = [40, 90, 11, 58, 31, 66, 28, 54, 79] list2 = [58, 90, 54, 31, 45, 11, 66, 28, 26] print(intersection_list(list1, list2))Способ 4: использование гибридного метода
В этом способе мы будем использовать гибридный метод. Он очень эффективен для выполнения данной задачи.
# Python program to get the intersection # of two lists def intersection(list1, list2): # Use of hybrid method temp = set(list2) list3 = [value for value in list1 if value in temp] return list3 list1 = [40, 90, 11, 58, 31, 66, 28, 54, 79] list2 = [58, 90, 54, 31, 45, 11, 66, 28, 26] print(intersection(list1, list2))[90, 11, 58, 31, 66, 28, 54]Способ 5: применение метода filter()
В данном способе мы будем использовать метод filter(). Пересечение выполняется над подсписками внутри других списков. Давайте разберемся в следующем примере.
# Python program togetthe intersection # of two lists, sublists and use of filter() def intersection_list(list1, list2): list3 = [list(filter(lambda x: x in list1, sublist)) for sublist in list2] return list3 list1 = [10, 9, 17, 40, 23, 18, 56, 49, 58, 60] list2 = [[25, 17, 23, 40, 32], [1, 10, 13, 27, 28], [60, 55, 61, 78, 15, 76]] print(intersection_list(list1, list2))[[17, 23, 40], [10], [60]]Метод filter() берет каждый элемент подсписка и проверяет, присутствует ли он в списке1. Понимание списка выполняется для каждого подсписка в list2.
Сравнение списков в Python и поиск совпадающих элементов
Иногда может возникнуть необходимость сравнить два списка в Python и найти совпадающие элементы. Рассмотрим пример:
список_1 = [1, 2, 3, 4, 5] список_2 = [9, 8, 7, 6, 5]Цель — создать функцию, которая принимает на вход два списка и возвращает список с элементами, которые присутствуют в обоих списках. В данном случае, таким элементом будет число 5.
Решение с использованием циклов
Простейшим решением будет использование двух вложенных циклов. Первый цикл будет проходить по элементам первого списка, а второй — по элементам второго списка. Если элементы совпадают, то они добавляются в итоговый список.
def returnMatches(a, b): matches = [] for i in a: if i in b: matches.append(i) return matchesРешение с использованием множеств
Еще одним эффективным способом решения этой задачи является использование множеств в Python. Множества — это неупорядоченные коллекции уникальных элементов. Они поддерживают операции, которые обычно применяются к математическим множествам, такие как объединение, пересечение и разность.
В Python множества можно создать с помощью функции set() или с помощью фигурных скобок <>.
def returnMatches(a, b): return list(set(a) & set(b))В данном случае используется операция пересечения (&), которая возвращает элементы, присутствующие в обоих множествах. Затем результат преобразуется обратно в список с помощью функции list().
Оба подхода успешно решают задачу, однако использование множеств обеспечивает более высокую производительность на больших объемах данных.
