I denna artikel utforskar vi hur man bestämmer längden på en lista i Python, genom att gå igenom några enkla metoder och analysera vilken som presterar bäst.
Vad är en Python-lista?
En lista i Python är en samling av element, likt en array, som kan lagra olika datatyper. En lista kan innehålla heltal, flyttal, strängar, booleska värden och till och med andra listor.
Här följer några exempel på hur listor kan se ut:
int_list = [1, 2, 3, 4, 5] print(int_list) # utskrift -> [1, 2, 3, 4, 5] float_list = [1.1, 2.2, 3.3, 4.4, 5.5] print(float_list) # utskrift -> [1.1, 2.2, 3.3, 4.4, 5.5] string_list = ['Geekflare', 'Cloudflare', 'Amazon'] print(string_list) # utskrift -> ['Geekflare', 'Cloudflare', 'Amazon'] boolean_list = [True, False] print(boolean_list) # utskrift -> [True, False] nested_list = [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]] print(nested_list) # utskrift -> [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]] different_datatype_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]] print(different_datatype_list) # utskrift -> [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
Python-listor skapas antingen med hakparenteser `[]` eller med hjälp av listkonstruktorn `list()`.
square_bracket_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]] print(square_bracket_list) # utskrift -> [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]] constructor_list = list((1, 1.1, 'adminvista.com', True, [1, 1.1, 'Geekflare', True])) print(constructor_list) # utskrift -> [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
Både `square_bracket_list`, skapad med hakparenteser, och `constructor_list`, skapad med listkonstruktorn, ger samma slutresultat.
Listor i Python är föränderliga, tillåter dubbletter och kan nås genom index.
Metoder för att bestämma listans längd
Det finns i huvudsak tre sätt att bestämma längden på en lista:
- Den inbyggda funktionen `len()`.
- Metoden `length_hint` från modulen `operator`.
- En egendefinierad funktion med en loop och räknare.
Metod 1: Den inbyggda funktionen `len()`
Funktionen `len()` är en inbyggd funktion i Python som används för att räkna antalet element i en lista, men också i andra itererbara objekt som set, tupler och dictionaries.
Exempel:
languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS'] languages_length = len(languages) print('Längden på listan är:', languages_length)
Utskrift:
Längden på listan är: 5
För att testa koden behöver du Python installerat. Om du inte har det kan du använda en online-Pythonkompilator.
Metod 2: Metoden `length_hint` från `operator`
Metoden `length_hint` används för att ge en indikation om längden på ett itererbart objekt (som listor, set, tupler och dictionaries). Den finns i Pythons `operator`-modul och skiljer sig från de vanliga inbyggda funktionerna.
Exempel:
import operator languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS'] languages_length = operator.length_hint(languages) print('Längden på listan med operator är:', languages_length)
Utskrift:
Längden på listan med operator är: 5
Metod 3: Egen funktion med räknare
I denna metod skapar vi en egen funktion som använder en `for`-loop och en räknare för att bestämma längden på listan.
Funktionen tar en lista (eller annat itererbart objekt) som argument och returnerar antalet element.
Exempel:
def iterable_count(iterable): length = 0 for item in iterable: length += 1 return length
Användningsexempel:
def iterable_count(iterable): length = 0 for item in iterable: length += 1 return length languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS'] languages_length = iterable_count(languages) print('Längden på listan med egen funktion är:', languages_length)
Utskrift:
Längden på listan med egen funktion är: 5
Analys av de tre metoderna
Prestandaanalys för en stor lista:
import timeit # för benchmarking och profilering import operator def iterable_count(iterable): length = 0 for item in iterable: length+=1 return length integer_list = list(range(1, 9999999)) # längdkontroll med len() start_time = timeit.default_timer() len_length = len(integer_list) print(timeit.default_timer() - start_time, 'Längden på listan med len() är:', len_length) # längdkontroll med operator.length_hint start_time = timeit.default_timer() len_length = operator.length_hint(integer_list) print(timeit.default_timer() - start_time, 'Längden på listan med length_hint är:', len_length) start_time = timeit.default_timer() iterable_count_length = iterable_count(integer_list) print(timeit.default_timer() - start_time, 'Längden på listan med egen funktion är:', iterable_count_length)
Utskrift:
3.957189619541168e-06 Längden på listan med len() är: 9999998 3.0621886253356934e-06 Längden på listan med length_hint är: 9999998 0.4059128537774086 Längden på listan med egen funktion är: 9999998
Som resultaten visar är `length_hint` snabbare (3.0621886253356934e-06) när det handlar om stora datamängder. Detta beror på att `length_hint` utnyttjar CPython runtime.
Prestandaanalys för en liten lista:
import timeit # för benchmarking och profilering import operator def iterable_count(iterable): length = 0 for item in iterable: length+=1 return length integer_list = list(range(1, 100)) # längdkontroll med len() start_time = timeit.default_timer() len_length = len(integer_list) print(timeit.default_timer() - start_time, 'Längden på listan med len() är:', len_length) # längdkontroll med operator.length_hint start_time = timeit.default_timer() len_length = operator.length_hint(integer_list) print(timeit.default_timer() - start_time, 'Längden på listan med length_hint är:', len_length) start_time = timeit.default_timer() iterable_count_length = iterable_count(integer_list) print(timeit.default_timer() - start_time, 'Längden på listan med egen funktion är:', iterable_count_length)
Utskrift:
7.813796401023865e-07 Längden på listan med len() är: 99 1.1278316378593445e-06 Längden på listan med length_hint är: 99 3.462657332420349e-06 Längden på listan med egen funktion är: 99
För mindre datamängder (tusentals element eller färre) är `len()` snabbare (7.813796401023865e-07).
Oavsett listans storlek tar vår egen funktion med räknare mer tid än de andra två metoderna.
Slutsats
I denna artikel har vi undersökt olika sätt att bestämma längden på en lista i Python, samt analyserat deras prestanda. Vi har sett att den inbyggda funktionen `len()` är snabbast för mindre listor, medan `length_hint` från `operator`-modulen är att föredra för stora datamängder. Den egendefinierade funktionen med en räknare är långsammare i båda fallen.