Під час взаємодії з ітераторами в Python, часто виникає потреба визначити кількість елементів, які вони містять. Давайте розглянемо, як можна скористатися вбудованою функцією Python для з’ясування довжини ітераційних об’єктів та інших корисних дій.
Python пропонує різноманітні структури даних та інструменти для їх обробки. Серед вбудованих функцій особливо цінною є len()
, яка дозволяє дізнатися про кількість елементів в ітерованому об’єкті.
У цьому матеріалі ми детально розглянемо використання функції len()
зі списками, кортежами, рядками та іншими об’єктами. Також розглянемо типові ситуації, де вона може бути корисною.
Розпочнемо! 👩🏫
Синтаксис функції len()
в Python
Синтаксис застосування функції len()
в Python є доволі простим:
len(iterable)
Функція len()
приймає один параметр, який має бути ітерованим об’єктом. Зазвичай це список, кортеж або рядок, але також може бути будь-який інший тип, що підтримує ітерацію.
Як бачимо, синтаксис len()
дуже простий. Перейдемо до розгляду прикладів.
📑 Для відтворення прикладів з цього посібника, ви можете використовувати Python REPL.
Застосування функції len()
з ітерованими об’єктами
З послідовностями
Функцію len()
можна використовувати для визначення довжини послідовностей, таких як списки, кортежі та рядки.
Ось приклад:
>>> числа = [9, 3, 6, 1, 2]
>>> len(числа)
5
>>> числа_кортеж = (9, 3, 6, 1, 2)
>>> len(числа_кортеж)
5
Для цих структур даних, що зберігають послідовність, зазвичай можна отримати доступ до елементів за їх індексами або отримати зріз (підпослідовність) при потребі.
З іншими колекціями
Також можна використовувати len()
з іншими колекціями Python, такими як множини та словники.
Ці структури даних є невпорядкованими колекціями. Хоча порядок елементів може бути неважливим, часто корисно знати загальну кількість елементів в колекції.
>>> числа_множина = set(числа)
>>> len(числа_множина)
5
>>> ціни = {'Блокнот': 5, 'Пенал': 7, 'Закладки': 3, 'Ручки': 1, 'Маркери': 8}
>>> len(ціни)
5
Типові випадки застосування функції len()
Ми вже розглянули прості приклади використання len()
для визначення кількості елементів. Тепер поглянемо, де це може бути корисним на практиці.
#1. Ітерація з використанням циклів For
Цикл for
в Python дозволяє ітеруватися по елементах в ітерованому об’єкті. Якщо потрібно отримати доступ до індексу кожного елемента замість самого елемента, або до індексу та елемента разом, можна скористатися функцією range()
, як показано нижче:
>>> числа = [9, 2, 4, 7, 8]
>>> for i in range(len(числа)):
... print(f"Індекс {i}: {числа[i]}")
Оскільки range(N)
генерує послідовність цілих чисел 0, 1, 2, …, N-1, використання range(len(числа))
надає нам набір дійсних індексів для циклу.
# Вивід
Індекс 0: 9
Індекс 1: 2
Індекс 2: 4
Індекс 3: 7
Індекс 4: 8
Однак більш рекомендованим способом доступу як до індексу, так і до елемента, є використання функції enumerate()
:
>>> числа = [9, 2, 4, 7, 8]
>>> for idx, num in enumerate(числа):
... print(f"Індекс {idx}: {num}")
# Вивід
Індекс 0: 9
Індекс 1: 2
Індекс 2: 4
Індекс 3: 7
Індекс 4: 8
#2. Умовний цикл з використанням циклів While
Припустимо, у вас є список чисел числа
. Метод списку pop()
видаляє останній елемент зі списку та повертає його.
Поки довжина списку числа
, визначена як len(числа)
, більша за нуль, є принаймні один елемент для видалення.
>>> числа = [9, 2, 4, 7, 8]
>>> while len(числа) > 0:
... числа.pop()
# Вивід
8
7
4
2
9
Наведений вище приклад є більш виразним способом написання наступного:
>>> числа = [9, 2, 4, 7, 8]
>>> while числа:
... числа.pop()
Вираз while числа:
еквівалентний умові “поки список числа
не порожній”.
#3. Перевірка довжини ітерованих об’єктів
Ще одним поширеним випадком використання len()
є перевірка довжини ітерованих об’єктів.
Тут ми перевіряємо, чи є ім’я користувача допустимим рядком, на основі його довжини (обчисленої за допомогою len()
):
>>> ім_я_користувача = "інший-випадковий-користувач"
>>> if len(ім_я_користувача) > 10:
... print("Ім'я користувача занадто довге; повинно бути максимум 10 символів.")
... elif len(ім_я_користувача) < 5:
... print("Ім'я користувача занадто коротке; повинно бути принаймні 5 символів.")
... else:
... print("Допустиме ім'я користувача!")
Ім'я користувача занадто довге; повинно бути максимум 10 символів.
#4. Спискові та словникові включення
Включення в Python пропонують стислий синтаксис для створення нових ітерованих об’єктів на основі існуючих. Ми можемо використовувати вбудовані функції у виразах включення.
Спискове включення
У цьому списковому включенні ми використовуємо len()
, щоб отримати довжину кожного рядка в списку мов.
>>> мови = ['Python', 'C', 'Rust', 'JavaScript']
>>> довжини_мов = [len(мова) for мова in мови]
>>> довжини_мов
[6, 1, 4, 10]
Словникове включення
У цьому словниковому включенні ми використовуємо список мов і len()
для створення словника:
>>> мови = ['Python', 'C', 'Rust', 'JavaScript']
>>> мова_довжина = {мова: len(мова) for мова in мови}
>>> мова_довжина
{'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}
Тут ключами та значеннями є рядки мов і їх довжина відповідно.
#5. Ключовий параметр у спеціальному сортуванні
Python має вбудований метод sort()
для сортування списків Python на місці та функцію sorted()
для сортування списків та інших ітерованих об’єктів.
В обох випадках можна використовувати параметр key
для налаштування сортування.
Тут ми сортуємо список мов за довжиною рядків.
>>> мови = ['Python', 'C', 'Rust', 'JavaScript']
>>> мови.sort(key=len)
>>> мови
['C', 'Rust', 'Python', 'JavaScript']
У фрагменті нижче ми використовуємо функцію sorted()
для отримання відсортованого списку.
>>> мови = ['Гінді', 'Англійська', 'Німецька', 'Французька']
>>> sorted(мови, key=len)
['Гінді', 'Німецька', 'Французька', 'Англійська']
У цьому прикладі “Німецька” та “Французька” мають по 6 символів. Оскільки функція sorted()
виконує стабільне сортування, порядок у вихідному списку зберігається.
#6. Довжина масивів NumPy
Ви також можете використовувати len()
з іншими структурами даних, як-от масиви NumPy.
>>> import numpy as np
>>> np_масив = np.array([3, 4, 6, 9])
>>> type(np_масив)
<class 'numpy.ndarray'>
>>> len(np_масив)
4
У цьому випадку np_масив
– це вектор із 4 елементами. Отже, len(np_масив)
повертає 4, кількість елементів у масиві.
Матриця – це двовимірний масив.
Розглянемо наступний приклад. len(np_масив)
дорівнює 2, що є кількістю рядків.
>>> матриця = [[1, 2, 3], [4, 5, 6]]
>>> np_масив = np.array(матриця)
>>> np_масив
array([[1, 2, 3],
[4, 5, 6]])
>>> len(np_масив)
2
Для кращого розуміння повернемося до матриці. Маємо структуру вкладеного списку, де зовнішній список містить два вкладених списки. І функція len()
повертає кількість елементів у контейнері (тут це два списки):
>>> help(len)
Довідка з вбудованої функції len в модулі builtins:
len(obj, /)
Повертає кількість елементів у контейнері.
Однак при роботі з багатовимірними масивами рекомендується використовувати атрибут shape
.
>>> np_масив.shape
(2, 3)
Поширені помилки, яких слід уникати під час використання функції len()
в Python
Підсумовуючи, розглянемо деякі типові помилки, яких слід уникати при використанні len()
в Python.
Використання len()
з неітерованими типами даних
Функція len()
приймає як аргумент лише дійсні ітеровані об’єкти. Якщо викликати len()
з недійсним типом даних, що не підлягає ітерації, виникне помилка.
До таких неприпустимих типів належать базові типи даних, як цілі числа, числа з плаваючою комою та логічні значення:
>>> len(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: об'єкт типу 'int' не має довжини
>>> len(True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: об'єкт типу 'bool' не має довжини
>>> len(3.14)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: об'єкт типу 'float' не має довжини
В Python генератори є ефективними варіантами для випадків, коли потрібна генерація послідовності. Об’єкт-генератор повертає елементи послідовності – за запитом – по одному елементу за раз. Але генератори не мають довжини.
Тому виникне помилка, якщо спробувати обчислити довжину об’єкта-генератора:
>>> числа_кв = (i * i for i in range(10))
>>> числа_кв
<generator object <genexpr> at 0x0157DBC0>
>>> len(числа_кв)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: об'єкт типу 'generator' не має довжини
Використання len()
з кортежами довжиною в один елемент
Якщо в кортеж вставляється лише один елемент, Python інтерпретує його як один елемент, а не як кортеж.
Ось приклад:
>>> числа = (1)
>>> len(числа)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: об'єкт типу 'int' не має довжини
Отже, якщо у вас є кортеж лише з одним елементом, ініціалізуйте його у формі ім_я_кортежу = (елемент,)
, щоб він інтерпретувався як кортеж:
>>> числа = (1,)
>>> len(числа)
1
Підсумки
Коротко підсумуємо, що ми розглянули у цьому посібнику:
- Ви можете визначити кількість елементів у будь-якому ітерованому об’єкті за допомогою функції
len()
в Python. Синтаксис використання:len(будь-який-дійсний-ітерований)
. - Це включає послідовності, такі як списки, кортежі та рядки. А також інші колекції, такі як словники та множини.
len()
часто використовується в циклах та включеннях.- Ви можете використовувати
len()
як ключовий параметр, коли потрібно налаштувати сортування за довжиною. Наприклад: сортування списку рядків на основі їх довжини.
Далі дізнайтеся, як використовувати функцію sum()
в Python.