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

Када радите са Питхон итераблеима, проналажење броја ставки које итерабле садржи је уобичајена операција. Научите како да користите Питхон-ов уграђени објектив да пронађете дужину итерабле-а и још много тога.

Питхон нуди скуп уграђених структура података и скуп метода за рад са њима. Поред тога, постоје уграђене функције које су корисне када радите са овим структурама података. Једна таква функција је лен() која даје број ставки присутних у итерабле.

У овом водичу ћемо научити како да користимо функцију лен() са листама, торкама, стринговима и још много тога. Такође ћемо видети неколико уобичајених случајева употребе.

Хајде да почнемо!👩‍🏫

Синтакса функције Питхон лен().

Ево синтаксе за коришћење Питхон функције лен:

len(iterable)

Као што се види, функција лен() захтева један параметар, који је било који важећи итерабле. Итерабле је често један од листе, тупле или стринга. Али може бити и било који други важећи тип.

Видимо да је синтакса за коришћење функције лен() супер једноставна. Затим, наставимо са кодирањем неколико примера.

📑 За примере кода у овом водичу, можете да кодирате заједно у Питхон РЕПЛ.

Коришћење функције лен() са Итераблес

Са секвенцама

Можете користити функцију лен() да пронађете дужину итерабле-а као што су листе, торке и стрингови.

Ево примера:

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

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

За ове структуре података које чувају секвенцу, обично ћете приступати елементима користећи њихов индекс или ћете по потреби добити исечак (подсеквенцију).

Са другим збиркама

Такође можете да користите функцију лен() са другим Питхон колекцијама као што су скупови и речници.

  Како пронаћи ИП адресу из Ксбок Ливе Гамертаг-а

Ове структуре података су неуређене колекције. Иако можда нисте заинтересовани за наручивање артикала, ипак је корисно да добијете укупан број ставки у колекцији.

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

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

Уобичајени случајеви употребе функције Питхон лен().

До сада смо видели једноставне примере коришћења функције лен() да бисмо добили број ставки у итерабле. Хајде сада да видимо где то можемо користити у пракси.

#1. Итерација користећи Фор петље

Питхон фор петља обезбеђује конструкцију за петљу кроз итерабле у фор ставци у итерабле синтакси. Али ако желите да приступите индексу сваке ставке уместо самој ставци или и индексу и ставкама заједно, можете користити функцију ранге() као што је приказано:

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

Пошто опсег(Н) даје низ целих бројева 0,1,2,…,Н – 1, коришћење опсега(лен(нумс)) нам даје скуп валидних индекса кроз које треба да се крећемо.

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

Међутим, препоручени Питхониц начин за приступ и индексу и елементу је коришћење функције енумерате:

>>> 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. Условна петља коришћењем вхиле петљи

Рецимо да имате листу бројева бројева. Метод листе поп() уклања последњу ставку са листе и враћа је.

Све док је дужина листе бројева лен(нумс) већа од нуле—постоји најмање један елемент који се може уклонити.

>>> 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()

док нумс: је еквивалентан услову „док листа бројева није празна“.

#3. Провера и валидација дужине итерабле

Још једна уобичајена употреба лен функције је провера и валидација дужине одређених итерабле.

Овде проверавамо да ли је корисничко име исправан стринг на основу дужине (израчунате помоћу функције лен()):

>>> 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. Листа и речничко разумевање

Разумевања у Питхон-у пружају сажету синтаксу за конструисање нових итерабле-а од постојећих. Можемо да користимо уграђене функције у изразу за разумевање.

  Апацхе Хиве објашњено за 5 минута или мање [+5 Learning Resources]

Разумевање листе

У овом разумевању листе, користимо функцију лен() да добијемо дужину сваког стринга на листи језика.

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

Разумевање речника

У овом разумевању речника, користимо листу језика и функцију лен() да бисмо направили речник:

>>> 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. Кључни параметар у прилагођеном сортирању

Питхон има уграђени метод сорт() за сортирање Питхон листа на месту и сортед() функцију за сортирање листа и других итерабле.

У оба ова, можете користити кључни параметар да бисте прилагодили сортирање.

Овде сортирамо листу језика на основу дужине стринга.

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

У исечку испод користимо функцију сортед() да бисмо добили сортирану листу.

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

У овом примеру, и „немачки“ и „француски“ имају по 6 знакова. Пошто функција сортед() обавља стабилно сортирање, редослед у оригиналној листи је очуван.

#6. Дужина НумПи низова

Такође можете користити функцију лен() са другим структурама података као што је НумПи низови.

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

У овом случају, нп_арраи је вектор са 4 елемента. Дакле, лен(нп_арраи) враћа 4, број елемената присутних у низу.

Матрица је дводимензионални низ.

Размотрите следећи пример. лен(нп_арраи) је 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

Да бисмо разумели, вратимо се на матрицу. Имамо структуру угнежђене листе где спољна листа садржи две угнежђене листе. А функција лен() враћа број ставки у контејнеру (овде су то две листе):

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

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

Међутим, када почнете да радите са вишедимензионалним низовима, препоручује се да уместо тога користите атрибут облика.

>>> np_array.shape
(2, 3)

Уобичајене замке које треба избегавати када користите Питхонову функцију лен().

Да бисмо закључили нашу дискусију, хајде да пређемо на неке од уобичајених замки које треба да избегавате када користите функцију лен у Питхон-у.

  Дубоко уроњење у ВСЛ2 могућности

Коришћење лен() са неитеративним типовима података

Знамо да функција лен узима само важеће итерабле као аргумент. То значи да ако позовете функцију лен са—неважећим типом података—која није итерабилна, наићи ћете на грешке.

Такви неважећи типови укључују основне типове података као што су цели бројеви, бројеви са покретним зарезом и Булови:

>>> 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()

У Питхон-у, генератори су меморијски ефикасни избори за случајеве употребе који захтевају генерисање секвенце. Објекат генератора враћа елементе низа – на захтев – један по један елемент. Али објекти генератора немају дужину.

Дакле, наићи ћете на грешке ако покушате да израчунате дужину објекта генератора:

>>> 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()

Коришћење лен() са торкама дужине један

Ако само уметнете елемент у тупле, Питхон га тумачи као један елемент, а не као торку.

Ево примера:

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

Дакле, када имате тупле са само једним елементом, иницијализујте га у овом облику: тупле_наме = (елт, ) тако да се тумачи као тупле:

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

Сумирајући

Ево резимеа онога што смо покрили у овом водичу:

  • Можете пронаћи број ставки у било ком итерабле користећи функцију лен() у Питхон-у. Синтакса за коришћење функције дужине је: лен(ани-валид-итерабле).
  • Ово укључује секвенце као што су листе, тупле и стрингови. И друге колекције као што су речници и сетови.
  • Функција лен() се обично користи у петљама и разумевању.
  • Такође можете користити функцију лен() као кључни параметар када треба да прилагодите сортирање према дужини. На пример: сортирање листе стрингова на основу њихове дужине.

Затим научите како да користите Питхон-ову функцију сум().