Синтаксис, приклади та випадки використання

Під час роботи з ітераторами Python пошук кількості елементів, які містять ітератори, є звичайною операцією. Дізнайтеся, як використовувати вбудовану лінзу Python для визначення довжини ітерацій та багато іншого.

Python пропонує набір вбудованих структур даних і набір методів для роботи з ними. Крім того, є вбудовані функції, які стають у пригоді під час роботи з цими структурами даних. Однією з таких функцій є len(), яка надає кількість елементів, присутніх у ітерації.

У цьому посібнику ми навчимося використовувати функцію len() зі списками, кортежами, рядками тощо. Ми також побачимо кілька типових випадків використання.

Починаємо!👩‍🏫

Синтаксис функції len() Python

Ось синтаксис використання функції len Python:

len(iterable)

Як видно, для функції len() потрібен один параметр, який є будь-яким допустимим ітерованим. Об’єкт ітерації часто є списком, кортежем або рядком. Але це також може бути будь-який інший дійсний тип.

Ми бачимо, що синтаксис використання функції len() надзвичайно простий. Далі перейдемо до кодування кількох прикладів.

📑 Для прикладів коду в цьому підручнику ви можете кодувати в Python REPL.

Використання функції len() з Iterables

З послідовністю

Ви можете використовувати функцію len(), щоб знайти довжину ітерованих елементів, таких як списки, кортежі та рядки.

Ось приклад:

>>> nums = [9,3,6,1,2]
>>> len(nums)
5

>>> nums_tup = (9,3,6,1,2)
>>> len(nums_tup)
5

Для цих структур даних, які зберігають послідовність, ви зазвичай отримуєте доступ до елементів, використовуючи їхній індекс, або отримуєте зріз (підпослідовність) за потреби.

З іншими колекціями

Ви також можете використовувати функцію len() з іншими колекціями Python, такими як набори та словники.

Ці структури даних є невпорядкованими колекціями. Хоча вас може не цікавити замовлення предметів, все ж корисно дізнатися загальну кількість предметів у колекції.

>>> nums_set = set(nums)
>>> len(nums_set)
5

>>> prices = {'Notebook':5,'Pencil case':7,'Bookmarks':3,'Pens':1,'Markers':8}
>>> len(prices)
5

Типові випадки використання функції len() Python

Наразі ми бачили прості приклади використання функції len() для отримання кількості елементів у ітерації. Тепер давайте подивимося, де ми можемо використати це на практиці.

  Як виправити проблеми із запуском Mac за допомогою режиму відновлення

#1. Ітерація з використанням циклів For

Цикл Python for надає конструкцію для проходу через ітеровані елементи в елементі for у ітераційному синтаксисі. Але якщо ви хочете отримати доступ до індексу кожного елемента замість самого елемента або до індексу та елементів разом, ви можете скористатися функцією range(), як показано:

>>> nums = [9,2,4,7,8]
>>> for i in range(len(nums)):
...      print(f"Index {i}: {nums[i]}")

Оскільки діапазон (N) дає послідовність цілих чисел 0,1,2,…,N – 1, використання діапазону (len(nums)) дає нам набір дійсних індексів для циклу.

# Output
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8

Однак рекомендований Pythonic спосіб отримати доступ як до індексу, так і до елемента використовує функцію enumerate:

>>> nums = [9,2,4,7,8]
>>> for idx,num in enumerate(nums):
...     print(f"Index {idx}: {num}")
# Output
Index 0: 9
Index 1: 2
Index 2: 4
Index 3: 7
Index 4: 8

#2. Умовний цикл з використанням циклів While

Скажімо, у вас є список чисел nums. Метод списку pop() видаляє останній елемент у списку та повертає його.

Поки довжина списку nums len(nums) більша за нуль, є принаймні один елемент, який можна видалити.

>>> nums = [9,2,4,7,8]
>>> while len(nums) > 0:
...     nums.pop()
# Output
8
7
4
2
9

Наведений вище приклад є більш чітким способом написання наступного:

>>> nums = [9,2,4,7,8]
>>> while nums:
...     nums.pop()

while nums: еквівалентно умові «поки список nums не порожній».

#3. Перевірка та перевірка довжини ітерацій

Іншим поширеним використанням функції len є перевірка та перевірка довжини певних ітерацій.

Тут ми перевіряємо, чи ім’я користувача є дійсним рядком на основі довжини (обчисленої за допомогою функції len()):

>>> username = "another-random-user"
>>> if len(username) > 10:
...     print("Username too long; should be 10 characters long at max.")
... elif len(username) < 5:
...     print("Username too short; should be at least 5 characters long.")
... else:
...     print("Valid username!")
Username too long; should be 10 characters long at max.

#4. Розуміння списку та словника

Розуміння в Python надають стислий синтаксис для створення нових ітерованих елементів із існуючих. Ми можемо використовувати вбудовані функції у виразі розуміння.

Розуміння списку

У цьому розумінні списку ми використовуємо функцію len(), щоб отримати довжину кожного рядка в списку мов.

>>> languages = ['Python','C','Rust','JavaScript']
>>> len_langs = [len(lang) for lang in languages]
>>> len_langs
[6, 1, 4, 10]

Розуміння словника

У цьому розумінні словника ми використовуємо список мов і функцію len() для створення словника:

>>> languages = ['Python','C','Rust','JavaScript']
>>> lang_len = {lang:len(lang) for lang in languages}
>>> lang_len
{'Python': 6, 'C': 1, 'Rust': 4, 'JavaScript': 10}

Тут ключами та значеннями є мовні рядки та довжина мовних рядків відповідно.

  30 років «Саперу» (судоку з вибухами)

#5. Ключовий параметр у спеціальному сортуванні

Python має вбудований метод sort() для сортування списків Python на місці та функцію sorted() для сортування списків та інших ітерацій.

В обох випадках ви можете використовувати параметр key для налаштування сортування.

Тут ми сортуємо список мов залежно від довжини рядка.

>>> languages = ['Python','C','Rust','JavaScript']
>>> languages.sort(key=len)
>>> languages
['C', 'Rust', 'Python', 'JavaScript']

У наведеному нижче фрагменті ми використовуємо функцію sorted(), щоб отримати відсортований список.

>>> languages = ['Hindi','English','German','French']
>>> sorted(languages,key=len)
['Hindi', 'German', 'French', 'English']

У цьому прикладі «німецька» та «французька» містять по 6 символів. Оскільки функція sorted() виконує стабільне сортування, порядок у вихідному списку зберігається.

#6. Довжина масивів NumPy

Ви також можете використовувати функцію len() з іншими структурами даних, наприклад Масиви NumPy.

>>> import numpy as np
>>> np_array = np.array([3,4,6,9])
>>> type(np_array)
<class 'numpy.ndarray'>
>>> len(np_array)
4

У цьому випадку np_array — це вектор із 4 елементів. Таким чином, len(np_array) повертає 4, кількість елементів у масиві.

Матриця – це двовимірний масив.

Розглянемо наступний приклад. len(np_array) дорівнює 2, що є кількістю рядків.

>>> matrix = [[1,2,3],[4,5,6]]
>>> np_array = np.array(matrix)
>>> np_array
array([[1, 2, 3],
       [4, 5, 6]])
>>> len(np_array)
2

Щоб зрозуміти, повернемося до матриці. У нас є структура вкладеного списку, де зовнішній список містить два вкладені списки. А функція len() повертає кількість елементів у контейнері (тут це два списки):

>>> help(len)
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

Однак, коли ви починаєте працювати з багатовимірними масивами, замість цього рекомендується використовувати атрибут shape.

>>> np_array.shape
(2, 3)

Поширені підводні камені, яких слід уникати під час використання функції len() Python

Підсумовуючи наше обговорення, давайте розглянемо деякі типові підводні камені, яких слід уникати під час використання функції len у Python.

  9 інструментів для перевірки чорних списків доменів (DNSBL) на наявність проблем із доставкою електронної пошти

Використання len() із неітерованими типами даних

Ми знаємо, що функція len приймає як аргумент лише дійсні ітерації. Це означає, що якщо ви викликаєте функцію len із недійсним типом даних, який не підлягає ітерації, ви зіткнетеся з помилками.

Такі неприпустимі типи включають основні типи даних, такі як цілі числа, числа з плаваючою комою та логічні значення:

>>> len(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

>>> len(True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'bool' has no len()

>>> len(3.14)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'float' has no len()

У Python генератори є ефективними варіантами пам’яті для випадків використання, які потребують генерації послідовності. Об’єкт-генератор повертає елементи послідовності — за запитом — по одному елементу за раз. Але генераторні об’єкти не мають довжини.

Тому ви зіткнетеся з помилками, якщо спробуєте обчислити довжину об’єкта генератора:

>>> nums_sq = (i*i for i in range(10))
>>> nums_sq
<generator object <genexpr> at 0x0157DBC0>
>>> len(nums_sq)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'generator' has no len()

Використання len() із кортежами довжини один

Якщо ви вставляєте елемент лише в кортеж, Python інтерпретує його як один елемент, а не як кортеж.

Ось приклад:

>>> nums = (1)
>>> len(nums)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

Отже, якщо у вас є кортеж лише з одним елементом, ініціалізуйте його у цій формі: ім’я_кортежу = (elt, ), щоб він інтерпретувався як кортеж:

>>> nums = (1,)
>>> len(nums)
1

Підводячи підсумки

Ось короткий виклад того, що ми розглянули в цьому посібнику:

  • Ви можете знайти кількість елементів у будь-якому ітераторі за допомогою функції len() у Python. Синтаксис використання функції length такий: len(any-valid-iterable).
  • Це включає такі послідовності, як списки, кортежі та рядки. І інші колекції, такі як словники та набори.
  • Функція len() зазвичай використовується в циклах і розуміннях.
  • Ви також можете використовувати функцію len() як ключовий параметр, коли вам потрібно налаштувати сортування за довжиною. Наприклад: сортування списку рядків на основі їх довжини.

Далі дізнайтеся, як використовувати функцію sum() Python.