Кількість елементів у списку 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)
кількість елементів списку, що задовольняють заданій умові: 6
2. Застосування 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 )
кількість елементів списку, що задовольняють задану умову: 7
3. 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 )
кількість елементів списку, що задовольняють заданій умові: 6
4. 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 )
кількість елементів списку, що задовольняють заданій умові: 6
5. reduce() з лямбда-функцією для підрахунку елементів списку Python з умовою чи критеріями
Lambda – це анонімна (без імені) функція, яка може приймати багато параметрів, але тіло функції має містити лише один вираз. Лямбда-функції найчастіше застосовують передачі як аргументів інші функції чи написання більш лаконічного коду. У цьому прикладі ми збираємося використовувати функції sum() , map() та reduce() для підрахунку елементів у списку, які поділяються на 5.
Нижче наведений код наочно демонструє це.
з 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, ) print( "кількість елементів списку, які задовольняють заданій умові:", result_count )
кількість елементів списку, що задовольняють заданій умові: 6
Сподіваюся, що ви дізналися про різні підходи до підрахунку елементів у списку Python за допомогою умов або критеріїв фільтрації даних.
Як визначити кількість різних елементів у списку?
Підкиньте ідею або код(в якому я розбиратимусь)/ Думаю зробити це через два цикли for. Якщо є коротше рішення, напишіть мені. Завдання:
Дано список, впорядкований з незменшення елементів у ньому. Визначте, скільки у ньому різних елементів.
14.2k 12 12 золотих знаків 44 44 срібних знаків 77 77 бронзових знаків
Можна через сортування, можна через set, можна і справді подвійним циклом: додаємо i-тий елемент масив ans, якщо масиві a[i] not in ans. А якщо впорядкований, то просто перевірити, що даний елемент не дорівнює попередньому
список упорядкований, а значить, ви можете за 1 прохід підрахувати дублікати. Знаючи кількість дублікатів просто знайти кількість різних значень.
3 відповіді 3
Досить і одного циклу: рахувати різницю двох сусідніх елементів. Якщо не 0, то вони різні. Це коли числа. Якщо не числа, просто порівнювати сусідні елементи.
Проте якщо в умові підсвічено, що дано відсортований список, то навряд чи очікується, що це треба вирішувати через set.
А ось ще такий кумедний варіант у мене вийшов чисто за приколом:
print(sum(x != y for x,y in zip(a, a[1:])) + bool(a))
Друге доданок потрібно, щоб правильно врахувати як порожній список, і перший елемент списку якщо список не порожній. А перший доданок вважає, скільки було змін значення списку після першого елемента.
найшвидший спосіб (раз упорядкований список):
nums = [1, 2, 2, 3, 4, 5, 5, 5] count = 1 for i in range(1, len(nums)): if nums[i - 1] != nums[i]: count += 1 print(count)
або трохи скоротивши код:
count = 1 for i in range (1, len (nums)): count + = nums [i - 1]! = nums [i]
правда, варто зробити перевірку для ситуації, коли список порожній
з тієї ж серії (якщо потрібно не тільки підрахувати кількість елементів, але і знайти ці елементи)
count = len([nums[0]] + [nums[i] for i in range(1, len(nums)) if nums[i - 1] != nums[i]])
Це все вимагає одного проходу за списком
Можна написати дуже короткий код, але за часом роботи для такого завдання він буде неоптимальним
Найнеоптимальніший за часом роботи код
nums = [1, 2, 2, 3, 4, 5, 5, 5] res = [] for elem in nums: if elem no in res: res.append(elem) print(len(res))