Zkontrolujte délku seznamu v Pythonu ve 3 snadných krocích

V tomto článku si ukážeme, jakými způsoby můžeme zjistit délku seznamu v Pythonu. Porovnáme různé metody a analyzujeme jejich efektivitu.

Co je to Python Seznam?

Seznam (list) je v Pythonu kolekce položek, která umožňuje ukládat různé datové typy. Do jednoho seznamu můžeme vložit celá čísla, čísla s plovoucí desetinnou čárkou, řetězce, logické hodnoty nebo dokonce i další seznamy.

Níže si ukážeme příklady různých seznamů:

int_list = [1, 2, 3, 4, 5]
print(int_list) # výstup -> [1, 2, 3, 4, 5]

float_list = [1.1, 2.2, 3.3, 4.4, 5.5]
print(float_list) # výstup -> [1.1, 2.2, 3.3, 4.4, 5.5]

string_list = ['Geekflare', 'Cloudflare', 'Amazon']
print(string_list) # výstup -> ['Geekflare', 'Cloudflare', 'Amazon']

boolean_list = [True, False]
print(boolean_list) # výstup -> [True, False]

nested_list = [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]]
print(nested_list) # výstup -> [[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) # výstup -> [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]

Seznamy v Pythonu je možné vytvářet buď pomocí hranatých závorek nebo pomocí konstruktoru list().

Zde je ukázka obou způsobů:

square_bracket_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
print(square_bracket_list) # výstup -> [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]

constructor_list = list((1, 1.1, 'etechblog.cz', True, [1, 1.1, 'Geekflare', True]))
print(constructor_list) # výstup -> [1, 1.1, 'etechblog.cz', True, [1, 1.1, 'Geekflare', True]]

Oba způsoby vytvoření seznamu vedou ke stejnému výsledku. Seznamy jsou v Pythonu dynamické, umožňují duplikace prvků a k prvkům se přistupuje pomocí indexů.

Možnosti zjištění délky seznamu

Délku seznamu můžeme v Pythonu zjistit třemi hlavními způsoby:

  • Pomocí vestavěné funkce len().
  • S použitím metody length_hint z modulu operator.
  • Implementací vlastní funkce s čítačem.

Metoda 1: Vestavěná funkce len()

Funkce len() je standardní součástí Pythonu a slouží ke zjištění počtu prvků v různých datových strukturách, včetně seznamů, množin, n-tic a slovníků.

Příklad:

languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
languages_length = len(languages)
print('Délka seznamu jazyků je: ',languages_length)

Výstup:

Délka seznamu jazyků je:  5

Pokud nemáte Python nainstalovaný, můžete k testování kódu použít online interpret Pythonu.

Metoda 2: Metoda length_hint z modulu operator

Metoda length_hint je součástí modulu operator a vrací odhadovanou délku iterovatelného objektu. Je nutné ji importovat a není dostupná jako vestavěná funkce.

Příklad:

import operator
languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
languages_length = operator.length_hint(languages)
print('Délka seznamu jazyků s operátorem je: ',languages_length)

Výstup:

Délka seznamu jazyků s operátorem je:  5

Metoda 3: Vlastní funkce s počítadlem

Tato metoda využívá klasický postup iterace pomocí for smyčky a čítače.

Napíšeme si vlastní funkci, která přijme jako argument iterovatelný objekt a vrátí jeho délku.

Kód funkce:

def iterable_count(iterable):
  length = 0
  for item in iterable:
    length+=1
  return length

Použití funkce:

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('Délka seznamu jazyků pomocí vlastní funkce je: ',languages_length)

Výstup:

Délka seznamu jazyků pomocí vlastní funkce je:  5

Analýza efektivnosti jednotlivých metod

Následuje porovnání výkonu jednotlivých metod pro velký seznam:

import timeit
import operator

def iterable_count(iterable):
  length = 0
  for item in iterable:
    length+=1
  return length

integer_list = list(range(1, 9999999))

#délka pomocí len()
start_time = timeit.default_timer()
len_length = len(integer_list)
print(timeit.default_timer() - start_time, 'Délka celočíselného seznamu pomocí len() je: ',len_length)

#délka pomocí operator.length_hint
start_time = timeit.default_timer()
len_length = operator.length_hint(integer_list)
print(timeit.default_timer() - start_time, 'Délka celočíselného seznamu pomocí length_hint je: ',len_length)

start_time = timeit.default_timer()
iterable_count_length = iterable_count(integer_list)
print(timeit.default_timer() - start_time, 'Délka celočíselného seznamu pomocí vlastní funkce je: ',iterable_count_length)

Výstup:

3.957189619541168e-06 Délka celočíselného seznamu pomocí len() je:  9999998
3.0621886253356934e-06 Délka celočíselného seznamu pomocí length_hint je:  9999998
0.4059128537774086 Délka celočíselného seznamu pomocí vlastní funkce je:  9999998

Jak je vidět, metoda length_hint je nejrychlejší (3.0621886253356934e-06) pro velké objemy dat. Je to proto, že length_hint využívá interní optimalizace běhového prostředí CPython.

Analýza výkonu pro menší seznam:

import timeit
import operator

def iterable_count(iterable):
  length = 0
  for item in iterable:
    length+=1
  return length

integer_list = list(range(1, 100))

#délka pomocí len()
start_time = timeit.default_timer()
len_length = len(integer_list)
print(timeit.default_timer() - start_time, 'Délka celočíselného seznamu pomocí len() je: ',len_length)

#délka pomocí operator.length_hint
start_time = timeit.default_timer()
len_length = operator.length_hint(integer_list)
print(timeit.default_timer() - start_time, 'Délka celočíselného seznamu pomocí length_hint je: ',len_length)

start_time = timeit.default_timer()
iterable_count_length = iterable_count(integer_list)
print(timeit.default_timer() - start_time, 'Délka celočíselného seznamu pomocí vlastní funkce je: ',iterable_count_length)

Výstup:

7.813796401023865e-07 Délka celočíselného seznamu pomocí len() je:  99
1.1278316378593445e-06 Délka celočíselného seznamu pomocí length_hint je:  99
3.462657332420349e-06 Délka celočíselného seznamu pomocí vlastní funkce je:  99

Pro menší seznamy je nejrychlejší funkce len() (7.813796401023865e-07).

V obou testech byla naše vlastní funkce s čítačem nejpomalejší.

Závěr

V tomto článku jsme si prošli různé způsoby zjišťování délky seznamu v Pythonu a porovnali jsme jejich rychlost. Zjistili jsme, že pro malé seznamy je nejefektivnější funkce len(), zatímco pro velké seznamy se více vyplatí používat metodu length_hint z modulu operator.