Python Dicas e Trechos de Código (Snippets) – Parte 4

Hoje vou publicar uma série de trechos de código (Snippets). Espero desta maneira poder ajudar. Para quem tiver interesse em desafios (problemas de programação) pode tentar resolver vários desafios em HackerRank.  No futuro poderei adicionar ou alterar alguns dos trechos de códigos aqui colocados.

Nos meus trabalhos em Python só uso a língua Inglesa para as variáveis funções e métodos como para as classes e do mesmo modo para os comentários.

Tipos de variáveis:

 

a = (1,2,3)							# <class 'tuple'>
print(type(a))
a = {1,2,3}							# <class 'set'>
print(type(a))
a = {'1': 1, '2': 2, '3': 3}		# <class 'dict'>

Exemplo de uso do operador ternário em Python em que o método verifica se o número é par ou ímpar:

def check_is_even_odd(number):
	return f'{number} is even' if number % 2 == 0 else f'{number} is odd'

for i in range(1, 6):
	print(check_is_even_odd(i))

Um dos recurso mais utilizados é as “List Comprehensions” é uma forma bastante rápida de tratar as listas em Python:

# Converts list numbers to squared numbers:
numbers = [1, 2, 3]
square_list = [x * x for x in numbers]  # [1, 4, 9]

# Converts a list from string to float:
strings = ["8.9", "6.0", "8.1", "7.5"]
floats = [float(num) for num in strings]  # [8.9, 6.0, 8.1, 7.5]

# List comprehension with if
# --------------------------

# Creates a list off odd numbers from another list
numbers = [4, 8, 15, 16, 23, 42, 108]
odd_list = [x for x in numbers if x % 2 == 1]  # [15, 23]

# Create a list of words that end in 'tion', you can do it like this:
text = ["function", "is", "a", "synonym", "of", "occupation"]
words_tion = [word for word in text if word.endswith("tion")]  
print(words_tion)  # ["function", "occupation"]

# else statement in list comprehension
# ------------------------------------
# We can, for example, get 0 in a new list for each negative number in the old list:
old_list = [8, 13, -7, 4, -9, 2, 10]
new_list = [num if num >= 0 else 0 for num in old_list]
print(new_list)  # [8, 13, 0, 4, 0, 2, 10]

Um outro recurso em Python bastante usado é o recurso ao uso de dicionários. O trecho de código abaixo permite calcular uma expressão a partir de um dicionário:

ex_dic = {'a': 3, 'b': 4, 'c': 5, 'd': 10, 'e': 11, 'f': 20}
calc = 'a + b - c'
calc_2 = [str(ex_dic[c]) if c in ex_dic.keys() else c for c in calc]
print(f"a + b - c = {eval(''.join(calc_2))}")

Gerar todas as combinações de números a partir de duas listas [1, 2, 3] e [4, 5, 6]:

all_combinations = [[x, y] for x in [1, 2, 3] for y in [4, 5, 6]]
print(all_combinations)  # [[1, 4], [1, 5], [1, 6], [2, 4], [2, 5], [2, 6], [3, 4], [3, 5], [3, 6]]

Aceder a listas encadeadas:

numbers = [1, [2, 3], 4]
nested_numbers = numbers[1]

print(nested_numbers)     # [2, 3]
print(nested_numbers[1])  # 3

As listas encadeadas são bastante convenientes para a representação de matrizes por exemplo a matriz:

1 2 3
4 5 6
7 8 9

Pode ser representada:

M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# Imagine a school as a list of classes that are, in turn, lists of students.
school = [["Maria", "Joaquim", "Tânia"], 
          ["Braulio", "Clara"],
          ["Maria", "Andreia", "Carla"]]
# If you want to create a list of all students in all classes without the list comprehension:
student_list = []
for class_group in school:
    for student in class_group:
        student_list.append(student)

print(student_list)
# result: ['Maria', 'Joaquim', 'Tânia', 'Braulio', 'Clara', 'Maria', 'Andreia', 'Carla']

# Alternatively, we can also use a comprehension with a double for loop:
student_list = [student for class_group in school for student in class_group]
print(student_list)
# result: ['Maria', 'Joaquim', 'Tânia', 'Braulio', 'Clara', 'Maria', 'Andreia', 'Carla']

Aqui fica a minha solução para um exercício que me surgiu no HackerRank. Em que existia uma lista encadeada de palavras e que tínhamos que criar uma nova lista em função do número digitado, exemplo:

text = [[“Glitch”, “is”, “a”, “minor”, “problem”, “that”, “causes”, “a”, “temporary”, “setback”],
[“Ephemeral”, “lasts”, “one”, “day”, “only”],
[“Accolade”, “is”, “an”, “expression”, “of”, “praise”]]

Input:

1

Resultado:

[‘a’, ‘a’]

text = [["Glitch", "is", "a", "minor", "problem", "that", "causes", "a", "temporary", "setback"],
        ["Ephemeral", "lasts", "one", "day", "only"],
        ["Accolade", "is", "an", "expression", "of", "praise"]]

n = int(input())
print([w for txt in text for w in txt if len(w) <= n])

Leave a Reply