Синтаксис, примери и случаи на употреба

Когато работите с Python iterables, намирането на броя на елементите, които iterables съдържа, е обичайна операция. Научете как да използвате вградената len на 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

За тези структури от данни, които съхраняват последователност, обикновено ще имате достъп до елементи, като използвате техния индекс или ще получите срез (подпоследователност), ако е необходимо.

  Топ 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() за получаване на броя на елементите в итерируем. Сега нека видим къде можем да използваме това на практика.

#1. Итерация с използване на цикли For

Цикълът for на Python предоставя конструкция за преминаване през итерируеми елементи в for елемент в итерируем синтаксис. Но ако искате да получите достъп до индекса на всеки елемент вместо до самия елемент или до индекса и елементите заедно, можете да използвате функцията range(), както е показано:

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

Тъй като range(N) дава последователността от цели числа 0,1,2,…,N – 1, използването на range(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}

Тук ключовете и стойностите са съответно езиковите низове и дължината на езиковите низове.

#5. Ключов параметър в персонализираното сортиране

Python има вградения метод sort() за сортиране на списъците на Python на място и функцията sorted() за сортиране на списъци и други итерируеми елементи.

И в двете можете да използвате ключовия параметър, за да персонализирате сортирането.

Тук сортираме списъка с езици въз основа на дължината на низа.

>>> 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.

  Спечелете повече клиенти със софтуер за маркетинг и продажби

Използване на 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. Синтаксисът за използване на функцията за дължина е: len(any-valid-iterable).
  • Това включва поредици като списъци, кортежи и низове. И други колекции като речници и комплекти.
  • Функцията len() обикновено се използва в цикли и разбирания.
  • Можете също да използвате функцията len() като ключов параметър, когато трябва да персонализирате сортирането според дължината. Например: сортиране на списък от низове въз основа на тяхната дължина.

След това научете как да използвате функцията sum() на Python.