A compreensão de listas é uma maneira elegante de definir e criar uma lista em python. Podemos criar listas apenas como declarações matemáticas e em apenas uma linha. A sintaxe de compreensão de lista é mais fácil de entender.
A compreensão de uma lista geralmente consiste nestas partes:
- Expressão de saída,
- Sequência de entrada,
- Uma variável que representa um membro da sequência de entrada e
- Uma parte opcional do predicado.
Por exemplo: lst = [x ** 2 for x in range (1, 11) if x % 2 == 1] aqui, x ** 2 é a expressão de saída, range (1, 11) é a seguencia de entrada, x é variável e if x % 2 == 1 é a parte do predicado.
Exemplo 1:
# Programa Python para demonstrar compreensão de listas em Python # a lista abaixo contém o quadrado de todos os números ímpares de 1 a 10 odd_square = [x ** 2 for x in range(1, 11) if x % 2 == 1] print (odd_square) # para compreensão, a geração acima é igual a, odd_square = [] for x in range(1, 11): if x % 2 == 1: odd_square.append(x**2) print (odd_square) # a lista abaixo contém potência de 2 de 1 a 8 power_of_2 = [2 ** x for x in range(1, 9)] print (power_of_2) # a lista abaixo contém primos e não primos no intervalo de 1 a 50 noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)] primes = [x for x in range(2, 50) if x not in noprimes] print(primes) # lista para diminuir os personagens print ([x.lower() for x in ["A","B","C"]]) # lista que extrai o número string = "Meu número de telefone é: 11122 !!" print("\nDigitos extraidos") numbers = [x for x in string if x.isdigit()] print(numbers) # Uma lista de lista para tabuada a = 5 table = [[a, b, a * b] for b in range(1, 11)] print("\nTabela de multiplicação") for i in table: print(i)
Resultado:
[1, 9, 25, 49, 81] [1, 9, 25, 49, 81] [2, 4, 8, 16, 32, 64, 128, 256] [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] ['a', 'b', 'c'] Digitos extraidos ['1', '1', '1', '2', '2'] Tabela de multiplicação [5, 1, 5] [5, 2, 10] [5, 3, 15] [5, 4, 20] [5, 5, 25] [5, 6, 30] [5, 7, 35] [5, 8, 40] [5, 9, 45] [5, 10, 50]
Depois de obter a lista, podemos obter uma parte dela usando o operador de fatiamento do Python, que tem a seguinte sintaxe:
[inicio: fim: paso] o que significa que o corte começará do início do índice e vai até o fim de acordo com o paso. O valor padrão de início é 0, a parada é o último índice da lista e o paso é 1
Assim, [:fim]
dividirá a lista do início ao fim do índice e [inicio:]
dividirá a lista do índice inicial até o final. O valor negativo das etapas mostra o percurso da direita para a esquerda em vez de o percurso da esquerda para a direita. É por isso que [::-1]
imprime a lista na ordem inversa.
Exemplo 2:
# Vamos primeiro criar uma lista para demonstrar o fatiamento # lst contém todos os números de 1 a 10 lst =list(range(1, 11)) print(lst) # a lista abaixo tem números de 2 a 5 lst1_5 = lst[1:5] print(lst1_5) # a lista abaixo tem números de 6 a 8 lst5_8 = lst[5:8] print(lst5_8) # a lista abaixo tem números de 2 a 10 lst1_ = lst[1:] print(lst1_) # a lista abaixo tem números de 1 a 5 lst_5 = lst[:5] print(lst_5) # a lista abaixo tem números de 2 a 8 no paso 2 lst1_8_2 = lst[1:8:2] print(lst1_8_2) # a lista abaixo tem números de 10 a 1 lst_rev = lst[::-1] print(lst_rev) # a lista abaixo tem números de 10 a 6 na etapa 2 lst_rev_9_5_2 = lst[9:4:-2] print(lst_rev_9_5_2)
Resultado:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [2, 3, 4, 5] [6, 7, 8] [2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 2, 3, 4, 5] [2, 4, 6, 8] [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] [10, 8, 6]
Podemos usar a função filter
para filtrar uma lista com base em alguma condição fornecida como uma expressão lambda como primeiro argumento e lista como segundo argumento, exemplo disso é mostrado abaixo:
Exemplo 3:
import functools # filtrando números ímpares lst = filter(lambda x : x % 2 == 1, range(1, 20)) print(list(lst)) # filtrando quadrados ímpares que são divisíveis por 5 lst = filter(lambda x : x % 5 == 0, [x ** 2 for x in range(1, 11) if x % 2 == 1]) print(list(lst)) # filtrando números negativos lst = filter((lambda x: x < 0), range(-5,5)) print(list(lst)) # implementando a função max() print(functools.reduce(lambda a,b: a if (a > b) else b, [7, 12, 45, 100, 15]))
Resultado:
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19] [25] [-5, -4, -3, -2, -1] 100
Artigo escrito por Utkarsh Trivedi e melhorado por ManasChhabra2, ramalaiguhan e traduzido por Acervo Lima de Python List Comprehension and Slicing
0 comentários:
Postar um comentário