Descubra o tamanho de listas Python: 3 métodos + análise de desempenho!

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_hint do módulo operator.
  • 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.