Ako nájsť dĺžku zoznamu v Pythone
Zoznam, ktorý je neoddeliteľnou súčasťou programovania v Pythone, sa musia naučiť všetci používatelia Pythonu a znalosť jeho užitočnosti a operácií je nevyhnutná a vždy výhodou.
Mnoho operácií sa vykonáva v zoznamoch, ale v tomto článku budeme diskutovať o dĺžke zoznamu. Dĺžka zoznamu znamená počet prvkov, ktoré má. Pozrieme sa na 8 rôznych metód na zistenie dĺžky zoznamu Python .
Príklad:
Input: lst = [10,20,30,40] Output: 4 Explanation: The output is 4 because the length of the list is 4.
Nájdite dĺžku zoznamu v Pythone
Nižšie sú uvedené metódy, ktorým sa budeme venovať v tomto článku:
- Použitím len() funkciu
- Použitie naivnej metódy
- Použitie length_hint()
- Použitím suma() metóda
- Pomocou a porozumenie zoznamu
- Použitím rekurzia
- Použitím vyčísliť funkciu
- Použitím zbierky modul
1. Nájdite dĺžku zoznamu pomocou funkcie len().
Python len() funkcia je vstavaná funkcia v Pythone. Môže sa použiť na nájdenie dĺžky objektu prechodom objektu do zátvoriek funkcie len.
Python3
# Python len()> li> => [> 10> ,> 20> ,> 30> ]> n> => len> (li)> print> (> 'The length of list is: '> , n)> |
Výkon:
The length of list is: 3
Časová zložitosť: O(n), kde n je dĺžka zoznamu
Pomocný priestor: O(1)
2. Nájdite dĺžku zoznamu pomocou naivnej metódy
Pri tejto metóde stačí spustiť cyklus a zvýšiť počítadlo až do posledného prvku zoznamu, aby ste poznali jeho počet. Toto je najzákladnejšia stratégia, ktorú možno použiť pri absencii iných súčasných techník.
Python3
# Initializing list> test_list> => [> 1> ,> 4> ,> 5> ,> 7> ,> 8> ]> # Printing test_list> print> (> 'The list is : '> +> str> (test_list))> # Finding length of list using loop> # Initializing counter> counter> => 0> for> i> in> test_list:> > # incrementing counter> > counter> => counter> +> 1> # Printing length of list> print> (> 'Length of list using naive method is : '> +> str> (counter))> |
Výkon:
The list is : [1, 4, 5, 7, 8] Length of list using naive method is : 5
Časová zložitosť: O(n)
Pomocný priestor: O(1)
3. Nájdite dĺžku zoznamu pomocou metódy length_hint().
Táto technika je menej známa technika zisťovania dĺžky zoznamu. Táto konkrétna metóda je definovaná v triede operátorov a môže tiež povedať nie. prvkov prítomných v zozname. Tu zisťujeme dĺžku zoznamu pomocou len() a length_hint()
Python3
from> operator> import> length_hint> # Initializing list> test_list> => [> 1> ,> 4> ,> 5> ,> 7> ,> 8> ]> # Printing test_list> print> (> 'The list is : '> +> str> (test_list))> # Finding length of list using len()> list_len> => len> (test_list)> # Finding length of list using length_hint()> list_len_hint> => length_hint(test_list)> # Printing length of list> print> (> 'Length of list using len() is : '> +> str> (list_len))> print> (> 'Length of list using length_hint() is : '> +> str> (list_len_hint))> |
Výkon :
The list is : [1, 4, 5, 7, 8] Length of list using len() is : 5 Length of list using length_hint() is : 5
4. Nájdite dĺžku zoznamu pomocou funkcie sum().
Použite iteráciu vo vnútri súčtu a s každou iteráciou pridáte jednu a na konci iterácie dostaneme celkovú dĺžku zoznamu.
Python3
# Initializing list> test_list> => [> 1> ,> 4> ,> 5> ,> 7> ,> 8> ]> # Printing test_list> print> (> 'The list is : '> +> str> (test_list))> # Finding length of list> # using sum()> list_len> => sum> (> 1> for> i> in> test_list)> # Printing length of list> print> (> 'Length of list using len() is : '> +> str> (list_len))> print> (> 'Length of list using length_hint() is : '> +> str> (list_len))> |
Výkon:
The list is : [1, 4, 5, 7, 8] Length of list using len() is : 5 Length of list using length_hint() is : 5
5. Nájdite dĺžku zoznamu pomocou porozumenia zoznamu
Inicializujte zoznam tzv test_list s niektorými hodnotami potom inicializujte premennú s názvom length na 0. Použite porozumenie zoznamu na vygenerovanie postupnosti jednotiek pre každý prvok v zozname testov.
Tým sa vytvorí zoznam tých, ktoré majú rovnakú dĺžku ako test_list. Teraz použite funkciu sum() na sčítanie všetkých položiek v zozname vygenerovanom pomocou porozumenie zoznamu . Priraďte súčet k premennej dĺžky. Vytlačte premennú dĺžky.
Python3
# Define the list to be used for the demonstration> test_list> => [> 1> ,> 4> ,> 5> ,> 7> ,> 8> ]> # Calculate the length of the list using a list comprehension and the sum function> # The list comprehension generates a sequence of ones for each element in the list> # The sum function then sums all the ones to give the length of the list> length> => sum> (> 1> for> _> in> test_list)> # Print the length of the list> print> (> 'Length of list using list comprehension is:'> , length)> |
Výkon
Length of list using list comprehension is: 5
Časová zložitosť: Porozumenie zoznamu vytvorí nový zoznam s dĺžkou rovnajúcou sa dĺžke testovacieho zoznamu. Funkcia sum() potom iteruje tento zoznam a vypočíta súčet. Preto je časová zložitosť tohto algoritmu O(N), kde N je dĺžka zoznamu testov.
Pomocný priestor: Algoritmus vytvorí nový zoznam s dĺžkou rovnajúcou sa dĺžke test_list pomocou porozumenia zoznamu. Zložitosť pomocného priestoru je teda tiež O(N), kde N je dĺžka zoznamu testov.
6. Nájdite dĺžku zoznamu pomocou rekurzie
Môžeme použiť a rekurzívna funkcia to chce zoznam lst ako vstup a rekurzívne sa volá, pričom sa odovzdáva časť zoznamu, ktorá vylučuje prvý prvok, kým zoznam nie je prázdny.
Základný prípad je, keď je zoznam prázdny, v takom prípade funkcia vráti 0. V opačnom prípade pridá 1 k výsledku volania funkcie na zvyšku zoznamu.
Python3
# Define a function to count the number of elements in a list using recursion> def> count_elements_recursion(lst):> > # Base case: if the list is empty, return 0> > if> not> lst:> > return> 0> > # Recursive case: add 1 to the count of the remaining elements in the list> > return> 1> +> count_elements_recursion(lst[> 1> :])> # Test the function with a sample list> lst> => [> 1> ,> 2> ,> 3> ,> 4> ,> 5> ]> print> (> 'The length of the list is:'> , count_elements_recursion(lst))> # Output: The length of the list is: 5> |
Výkon
The length of the list is: 5
Časová zložitosť: O(n) kde n je dĺžka zoznamu. Je to preto, že funkcia vykoná n rekurzívnych volaní, z ktorých každé trvá O(1) čas a na každej úrovni sa mimo rekurzívneho volania vykoná aj O(1) práca.
Zložitosť priestoru: O(n) kde n je dĺžka zoznamu. Je to preto, že funkcia vytvára n zásobníkových rámcov v zásobníku hovorov v dôsledku rekurzívnych volaní.
7. Nájdite dĺžku zoznamu pomocou funkcie enumerate().
Python enumerate() metóda pridáva počítadlo do iterovateľného a vracia ho vo forme enumeračného objektu.
Python3
# python code to find the length> # of list using enumerate function> list1> => [> 1> ,> 4> ,> 5> ,> 7> ,> 8> ]> s> => 0> for> i, a> in> enumerate> (list1):> > s> +> => 1> print> (s)> |
Výkon
5
8. Nájdite dĺžku zoznamu pomocou kolekcií
Prípadne môžete použiť aj suma() spolu s metódou values() pre zbierky Počítadlo objekt na získanie dĺžky zoznamu.
Python3
from> collections> import> Counter> # Initializing list> test_list> => [> 1> ,> 4> ,> 5> ,> 7> ,> 8> ]> # Finding length of list using Counter()> list_len> => sum> (Counter(test_list).values())> print> (> 'Length of list using Counter() is:'> , list_len)> # This code is contributed by Edula Vinay Kumar Reddy> |
Výkon
Length of list using Counter() is: 5
Časová zložitosť: O(n), kde n je dĺžka zoznamu. Je to preto, že funkcia Counter() má časovú zložitosť O(n), keď sa použije na zoznam dĺžky n, a metóda values() a funkcia sum() majú pri aplikácii časovú zložitosť O(n). na zoznam dĺžky n.
Zložitosť priestoru: O(n) ako funkcia Counter() vytvorí slovník s n pármi kľúč – hodnota, z ktorých každý predstavuje prvok a jeho počet v zozname. Tento slovník zaberá O(n) miesta.
Analýza výkonu: Naivná vs Python len() vs Python length_hint()
Pri výbere medzi alternatívami je vždy potrebné mať opodstatnený dôvod, prečo si vybrať jednu pred druhou. V tejto časti je vykonaná časová analýza toho, koľko času je potrebné na vykonanie všetkých z nich, aby sa ponúkla lepšia voľba na použitie.
Python3
from> operator> import> length_hint> import> time> # Initializing list> test_list> => [> 1> ,> 4> ,> 5> ,> 7> ,> 8> ]> # Printing test_list> print> (> 'The list is : '> +> str> (test_list))> # Finding length of list> # using loop> # Initializing counter> start_time_naive> => time.time()> counter> => 0> for> i> in> test_list:> > # incrementing counter> > counter> => counter> +> 1> end_time_naive> => str> (time.time()> -> start_time_naive)> # Finding length of list> # using len()> start_time_len> => time.time()> list_len> => len> (test_list)> end_time_len> => str> (time.time()> -> start_time_len)> # Finding length of list> # using length_hint()> start_time_hint> => time.time()> list_len_hint> => length_hint(test_list)> end_time_hint> => str> (time.time()> -> start_time_hint)> # Printing Times of each> print> (> 'Time taken using naive method is : '> +> end_time_naive)> print> (> 'Time taken using len() is : '> +> end_time_len)> print> (> 'Time taken using length_hint() is : '> +> end_time_hint)> |
Výkon:
The list is : [1, 4, 5, 7, 8] Time taken using naive method is : 2.6226043701171875e-06 Time taken using len() is : 1.1920928955078125e-06 Time taken using length_hint() is : 1.430511474609375e-06
Na obrázkoch nižšie je jasne vidieť, že zaberaný čas je naivné>> length_hint()> len() , ale čas závisí vo veľkej miere od operačného systému a niekoľkých jeho parametrov.
V dvoch po sebe idúcich behoch môžete získať kontrastné výsledky, v skutočnosti niekedy naivné zaberie najmenej času z troch. Všetkých možných 6 permutácií je možných.
naivný> len()> length_hint()
naivný> len()=dĺžka_hint()
naivný> length_hint()>len()
naivný> length_hint()> len()
Diskutovali sme o 8 rôznych metódach na nájdenie dĺžky zoznamu v Pythone. Urobili sme aj analýzu výkonnosti, aby sme skontrolovali, ktorá metóda je najlepšia.
Na zistenie dĺžky zoznamu môžete použiť ktorúkoľvek z vyššie uvedených metód. Hľadanie dĺžky zoznamu je veľmi užitočné, keď sa zaoberáte veľkými zoznamami a chcete skontrolovať počet záznamov.
Pozrite si ďalšie stránky so zoznamami Python:
- Metódy Python List
- Cvičenie Python List
- Priestorová zložitosť operácií zoznamu v Pythone