Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Conjuntos e Tuplas | Uso Eficiente de Estruturas de Dados
Técnicas de Otimização em Python

bookConjuntos e Tuplas

Antes de prosseguirmos com conjuntos e tuplas, é importante mencionar que dicionários não serão abordados aqui.

Conjunto

Um conjunto oferece complexidade de tempo O(1) em média para inserções, remoções e buscas, o que significa que essas operações são realizadas em tempo constante, independentemente do tamanho do conjunto. Isso torna os conjuntos muito mais rápidos do que listas para testes de pertencimento e operações como adicionar ou remover elementos, onde listas exigem complexidade de tempo O(n) (o tempo cresce linearmente com o tamanho da lista) no pior caso.

Quando utilizar:

  • Necessidade de elementos únicos, garantindo que não haja duplicatas na coleção;
  • Requisito de teste de pertencimento rápido, tornando conjuntos ideais para tarefas como verificar a existência de um item;
  • Realização de operações como união, interseção ou diferença de conjuntos, que possuem métodos otimizados;
  • Ordem irrelevante, pois conjuntos são inerentemente não ordenados e não há necessidade de manter a ordem de inserção.
1234567891011121314151617181920
# Removing duplicates from a list using a set numbers = [1, 3, 2, 3, 5, 4, 5] unique_numbers = set(numbers) print(f'Unique Numbers: {unique_numbers}') # Fast membership testing names = {'Alice', 'Bob', 'Charlie'} print(f'Is Alice in the set? {"Alice" in names}') print(f'Is Eve in the set? {"Eve" in names}') # Set operations: union, intersection, and difference set_a = {1, 4, 3, 2} set_b = {3, 5, 4, 6} print(f'Union: {set_a.union(set_b)}') print(f'Intersection: {set_a.intersection(set_b)}') print(f'Difference: {set_a.difference(set_b)}') # Removing elements from a set safely with discard names.discard('Alice') # Safe removal, no error if the element doesn't exist print(f'Names after removal: {names}')
copy

Agora, vamos comparar o desempenho de um conjunto com uma lista ao testar pertencimento:

12345678910111213141516171819
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Create a large list and set with the same elements large_list = list(range(10000000)) large_set = set(large_list) # Test membership for an element at the end element_to_find = 9999999 @timeit_decorator(number=50) def test_membership(element, collection): return element in collection print('List:') print(test_membership(element_to_find, large_list)) print('Set:') print(test_membership(element_to_find, large_set))
copy

Tupla

Tuplas são normalmente utilizadas quando é necessário garantir que os dados não possam ser alterados ou como chave em um dict ou elemento em um set (pois tuplas são hashable).

  • Melhor que listas: quando é necessário dados imutáveis, deseja-se usar a coleção como chave de dicionário ou elemento de conjunto, ou quando se busca armazenamento eficiente em memória para uma coleção de tamanho fixo;

  • Melhor que arrays do NumPy: quando os dados são não numéricos ou quando a imutabilidade é fundamental. Enquanto arrays do NumPy são projetados para cálculos numéricos e são mutáveis por padrão, tuplas oferecem segurança para dados não numéricos ou pequenas coleções estruturadas que devem permanecer constantes.

12345678
# Each tuple in the list represents an immutable student record students = [ (1834, 'James', 'Johnson'), (2749, 'Alice', 'Smith'), (4923, 'Bob', 'Brown') ] # Attempting to modify a tuple will raise a TypeError students[0][1] = 'Fred'
copy

Como a lista students contém registros de estudantes (ID, nome, sobrenome) que precisam ser somente leitura, é mais adequado utilizar tuplas para cada registro em vez de listas. Além disso, como mencionado acima, tuplas são um pouco mais eficientes em termos de memória em comparação com listas.

1. Qual dos seguintes cenários é mais adequado para o uso de um conjunto (set) em vez de uma lista?

2. Você possui um conjunto de dados com milhões de registros e precisa verificar frequentemente se valores específicos existem nele. Qual estrutura de dados é mais eficiente para esse propósito?

3. Você está criando um registro para cada estudante que inclui um ID único, nome e sobrenome. Os dados não devem ser alterados após serem criados. Qual estrutura de dados seria a mais apropriada?

question mark

Qual dos seguintes cenários é mais adequado para o uso de um conjunto (set) em vez de uma lista?

Select the correct answer

question mark

Você possui um conjunto de dados com milhões de registros e precisa verificar frequentemente se valores específicos existem nele. Qual estrutura de dados é mais eficiente para esse propósito?

Select the correct answer

question mark

Você está criando um registro para cada estudante que inclui um ID único, nome e sobrenome. Os dados não devem ser alterados após serem criados. Qual estrutura de dados seria a mais apropriada?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 2

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 7.69

bookConjuntos e Tuplas

Deslize para mostrar o menu

Antes de prosseguirmos com conjuntos e tuplas, é importante mencionar que dicionários não serão abordados aqui.

Conjunto

Um conjunto oferece complexidade de tempo O(1) em média para inserções, remoções e buscas, o que significa que essas operações são realizadas em tempo constante, independentemente do tamanho do conjunto. Isso torna os conjuntos muito mais rápidos do que listas para testes de pertencimento e operações como adicionar ou remover elementos, onde listas exigem complexidade de tempo O(n) (o tempo cresce linearmente com o tamanho da lista) no pior caso.

Quando utilizar:

  • Necessidade de elementos únicos, garantindo que não haja duplicatas na coleção;
  • Requisito de teste de pertencimento rápido, tornando conjuntos ideais para tarefas como verificar a existência de um item;
  • Realização de operações como união, interseção ou diferença de conjuntos, que possuem métodos otimizados;
  • Ordem irrelevante, pois conjuntos são inerentemente não ordenados e não há necessidade de manter a ordem de inserção.
1234567891011121314151617181920
# Removing duplicates from a list using a set numbers = [1, 3, 2, 3, 5, 4, 5] unique_numbers = set(numbers) print(f'Unique Numbers: {unique_numbers}') # Fast membership testing names = {'Alice', 'Bob', 'Charlie'} print(f'Is Alice in the set? {"Alice" in names}') print(f'Is Eve in the set? {"Eve" in names}') # Set operations: union, intersection, and difference set_a = {1, 4, 3, 2} set_b = {3, 5, 4, 6} print(f'Union: {set_a.union(set_b)}') print(f'Intersection: {set_a.intersection(set_b)}') print(f'Difference: {set_a.difference(set_b)}') # Removing elements from a set safely with discard names.discard('Alice') # Safe removal, no error if the element doesn't exist print(f'Names after removal: {names}')
copy

Agora, vamos comparar o desempenho de um conjunto com uma lista ao testar pertencimento:

12345678910111213141516171819
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator # Create a large list and set with the same elements large_list = list(range(10000000)) large_set = set(large_list) # Test membership for an element at the end element_to_find = 9999999 @timeit_decorator(number=50) def test_membership(element, collection): return element in collection print('List:') print(test_membership(element_to_find, large_list)) print('Set:') print(test_membership(element_to_find, large_set))
copy

Tupla

Tuplas são normalmente utilizadas quando é necessário garantir que os dados não possam ser alterados ou como chave em um dict ou elemento em um set (pois tuplas são hashable).

  • Melhor que listas: quando é necessário dados imutáveis, deseja-se usar a coleção como chave de dicionário ou elemento de conjunto, ou quando se busca armazenamento eficiente em memória para uma coleção de tamanho fixo;

  • Melhor que arrays do NumPy: quando os dados são não numéricos ou quando a imutabilidade é fundamental. Enquanto arrays do NumPy são projetados para cálculos numéricos e são mutáveis por padrão, tuplas oferecem segurança para dados não numéricos ou pequenas coleções estruturadas que devem permanecer constantes.

12345678
# Each tuple in the list represents an immutable student record students = [ (1834, 'James', 'Johnson'), (2749, 'Alice', 'Smith'), (4923, 'Bob', 'Brown') ] # Attempting to modify a tuple will raise a TypeError students[0][1] = 'Fred'
copy

Como a lista students contém registros de estudantes (ID, nome, sobrenome) que precisam ser somente leitura, é mais adequado utilizar tuplas para cada registro em vez de listas. Além disso, como mencionado acima, tuplas são um pouco mais eficientes em termos de memória em comparação com listas.

1. Qual dos seguintes cenários é mais adequado para o uso de um conjunto (set) em vez de uma lista?

2. Você possui um conjunto de dados com milhões de registros e precisa verificar frequentemente se valores específicos existem nele. Qual estrutura de dados é mais eficiente para esse propósito?

3. Você está criando um registro para cada estudante que inclui um ID único, nome e sobrenome. Os dados não devem ser alterados após serem criados. Qual estrutura de dados seria a mais apropriada?

question mark

Qual dos seguintes cenários é mais adequado para o uso de um conjunto (set) em vez de uma lista?

Select the correct answer

question mark

Você possui um conjunto de dados com milhões de registros e precisa verificar frequentemente se valores específicos existem nele. Qual estrutura de dados é mais eficiente para esse propósito?

Select the correct answer

question mark

Você está criando um registro para cada estudante que inclui um ID único, nome e sobrenome. Os dados não devem ser alterados após serem criados. Qual estrutura de dados seria a mais apropriada?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 2
some-alt