Neste artigo, vamos explorar as diversas abordagens para determinar o tamanho de uma lista em Python, detalhando cada método e identificando o mais eficiente.
O que são Listas em Python?
Em Python, uma lista é uma coleção de itens, também conhecida como array, que tem a capacidade de armazenar múltiplos tipos de dados. Uma única lista pode conter inteiros, números de ponto flutuante, strings, valores booleanos e até mesmo outras listas aninhadas.
int_list = [1, 2, 3, 4, 5]
print(int_list) # Saída: [1, 2, 3, 4, 5]
float_list = [1.1, 2.2, 3.3, 4.4, 5.5]
print(float_list) # Saída: [1.1, 2.2, 3.3, 4.4, 5.5]
string_list = ['Geekflare', 'Cloudflare', 'Amazon']
print(string_list) # Saída: ['Geekflare', 'Cloudflare', 'Amazon']
boolean_list = [True, False]
print(boolean_list) # Saída: [True, False]
nested_list = [[1, 2], [1.1, 2.2], ['Geekflare', 'Cloudflare'], [True, False]]
print(nested_list) # Saída: [[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) # Saída: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
As listas podem ser criadas utilizando colchetes ou através da função construtora `list()`.
square_bracket_list = [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
print(square_bracket_list) # Saída: [1, 1.1, 'Geekflare', True, [1, 1.1, 'Geekflare', True]]
constructor_list = list((1, 1.1, 'etechpt.com', True, [1, 1.1, 'Geekflare', True]))
print(constructor_list) # Saída: [1, 1.1, 'etechpt.com', True, [1, 1.1, 'Geekflare', True]]
Ambas as abordagens produzem o mesmo resultado. As listas em Python são mutáveis, permitindo elementos duplicados e acessíveis através de seus índices.
Maneiras de Descobrir o Tamanho de uma Lista
- Usando a função embutida
len(). - Através do método
length_hintdo módulooperator. - Criando uma função personalizada com um contador.
Método 1: Função Embutida len()
A função len() é uma ferramenta nativa de Python utilizada para obter o comprimento de diversas coleções de dados, como listas, conjuntos, tuplas e dicionários.
languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
languages_length = len(languages)
print('O comprimento da lista de linguagens é:', languages_length)
Resultado:
O comprimento da lista de linguagens é: 5
Certifique-se de ter o Python instalado ou utilize um compilador online para praticar o código.
Método 2: Método length_hint do Módulo operator
O length_hint é uma função do módulo operator, que retorna um valor estimado do tamanho de um objeto iterável, como listas, conjuntos, tuplas e dicionários. Diferentemente de outras operações embutidas, ele precisa ser importado.
import operator
languages = ['Python', 'Java', 'C++', 'PHP', 'nodeJS']
languages_length = operator.length_hint(languages)
print('O comprimento da lista de linguagens usando operator é:', languages_length)
Resultado:
O comprimento da lista de linguagens usando operator é: 5
Método 3: Função Personalizada com Contador
Nesta abordagem, empregamos um método tradicional utilizando um loop for e um contador para determinar o comprimento da lista.
Para isso, criamos uma função que aceita uma lista ou qualquer iterável como entrada e retorna o seu comprimento.
def iterable_count(iterable):
length = 0
for item in iterable:
length += 1
return length
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('O comprimento da lista de linguagens usando função personalizada é:', languages_length)
Resultado:
O comprimento da lista de linguagens usando função personalizada é: 5
Análise Comparativa dos 3 Métodos
Análise de desempenho para listas grandes:
import timeit
import operator
def iterable_count(iterable):
length = 0
for item in iterable:
length += 1
return length
integer_list = list(range(1, 9999999))
# Verificação do comprimento usando len()
start_time = timeit.default_timer()
len_length = len(integer_list)
print(timeit.default_timer() - start_time, 'Comprimento da lista de inteiros usando len():', len_length)
# Verificação do comprimento usando operator.length_hint
start_time = timeit.default_timer()
len_length = operator.length_hint(integer_list)
print(timeit.default_timer() - start_time, 'Comprimento da lista de inteiros usando length_hint:', len_length)
start_time = timeit.default_timer()
iterable_count_length = iterable_count(integer_list)
print(timeit.default_timer() - start_time, 'Comprimento da lista de inteiros usando função personalizada:', iterable_count_length)
Resultado:
3.957189619541168e-06 Comprimento da lista de inteiros usando len(): 9999998 3.0621886253356934e-06 Comprimento da lista de inteiros usando length_hint: 9999998 0.4059128537774086 Comprimento da lista de inteiros usando função personalizada: 9999998
Como podemos observar, length_hint demonstra ser o mais rápido (3.0621886253356934e-06) ao lidar com grandes conjuntos de dados, na ordem de milhões de itens. Isso se deve ao fato de length_hint ser utilizado pelo runtime CPython, sendo essencialmente um wrapper em Python.
Análise de desempenho para listas pequenas:
import timeit
import operator
def iterable_count(iterable):
length = 0
for item in iterable:
length += 1
return length
integer_list = list(range(1, 100))
# Verificação do comprimento usando len()
start_time = timeit.default_timer()
len_length = len(integer_list)
print(timeit.default_timer() - start_time, 'Comprimento da lista de inteiros usando len():', len_length)
# Verificação do comprimento usando operator.length_hint
start_time = timeit.default_timer()
len_length = operator.length_hint(integer_list)
print(timeit.default_timer() - start_time, 'Comprimento da lista de inteiros usando length_hint:', len_length)
start_time = timeit.default_timer()
iterable_count_length = iterable_count(integer_list)
print(timeit.default_timer() - start_time, 'Comprimento da lista de inteiros usando função personalizada:', iterable_count_length)
Resultado:
7.813796401023865e-07 Comprimento da lista de inteiros usando len(): 99
1.1278316378593445e-06 Comprimento da lista de inteiros usando length_hint: 99
3.462657332420349e-06 Comprimento da lista de inteiros usando função personalizada: 99
Conforme evidenciado, len() apresenta um desempenho superior (7.813796401023865e-07) quando a lista possui milhares de itens ou menos.
Em ambos os cenários, a função personalizada com contador demonstra ser menos eficiente em termos de velocidade comparada aos dois outros métodos.
Conclusão
Neste artigo, exploramos diferentes abordagens para determinar o tamanho de uma lista em Python, e comparamos a eficiência de cada um deles.