terça-feira, 26 de janeiro de 2021

Compreensão e segmentação da lista Python

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:

Por exemplo :

lst = [x ** 2 para x no intervalo (1, 11) se x% 2 == 1] 

aqui, x ** 2 é a expressão de saída, 
      intervalo (1, 11) é a sequência de entrada, 
      x é variável e   
      se x % 2 == 1 é 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 do
# intervalo 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 = "my phone number is : 11122 !!"
  
print("\nExtracted digits")  
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("\nMultiplication Table")  
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']

Dígitos extraídos
['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:


[start : stop : steps]

o que significa que o corte começará do início do índice
 subirá até stop no paso steps.
 O valor padrão de start é 0, a stop é o último índice da lista
 e para step é 1 

Assim, [:stop] dividirá a lista do início ao fim do índice e [start:] 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 na etapa 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 o segundo argumento, exemplo dos quais é mostrado a seguir:

Exemplo 3:

import functools 
  
#  filtering odd numbers 
lst = filter(lambda x : x % 2 == 1, range(1, 20)) 
print (list(lst)) 
   
#  filtering odd square which are divisible by 5 
lst = filter(lambda x : x % 5 == 0,  
      [x ** 2 for x in range(1, 11) if x % 2 == 1]) 
print (list(lst)) 
   
#   filtering negative numbers 
lst = filter((lambda x: x < 0), range(-5,5)) 
print (list(lst)) 
   
#  implementing max() function, using 
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

Este artigo é uma contribuição de Utkarsh Trivedi. Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.

Artigo escrito por GeeksforGeeks e traduzido por Acervo Lima de Python List Comprehension and Slicing.

0 comentários:

Postar um comentário