MC-102 — Aula 13
2a passagem por listas
é possivel declarar os tipos dos parametros e da saida de uma funcao. O Python não usa essa informação ainda, mas há alguns casos onde isso é útil (editor, futuras versões do python)
def soma(a,b):
return a+b
def soma(a: float, b:float) -> float:
tipos básicos
int
float
str
bool
alguns tipos compostos
list[int]
- lista de inteirostuple[int, int, str]
há coisas mais complicadas
É possivel acessar e modificar uma subsequencia de uma lista (slice)
>>> a = "ouviram do ipiranga margens placidas"
>>> a[4:10]
'ram do'
como o range, vai do indice 4 ate antes do indice 10
Abreviaçoes do slice.
sem o primeiro numero indica começando do 0
sem o segundo numero indica ate o fim da lista
>>> a[:10]
'ouviram do'
>>> a[10:]
' ipiranga margens placidas'
atribuições de uma lista à uma variável não copia a lista. É a mesma lista.
a = [10,20,30,40]
b = a
print(b)
a[0]=99
print(b)
a linha b = a
não cria uma copia da lista de a para b e
assim mudanças em a “sao sentidas” por b
Se voce quer evitar isso, voce quer que b
seja uma copia
de a
. Uma forma de fazer isso é um slice do comeco ao
fim
a = [10,20,30,40]
b = a[:]
print(b)
a[0]=99
print(b)
Ha tambem a função copy
do pacote copy
pode-se atribuir valor a um slice. O Pythom remove o slice original e insere a atribuição naquele ponto.
o slice e o valor atribuido não precisam ter o mesmo tamanho
a = [10,20,30,40, 50, 60]
a[1:4] = [21, 31, 41]
print(a)
a[1:4]=[91]
print(a)
a[1:4] = [1,3,5,7,9,11,13]
print(a)
a atribuicao pode ser maior ou menor que o slice original.
Como obter uma lista baseado nos elementos de outra.
Dado uma lista
gerar outra lista que é o quadrado dos
numeros impares de lista
saida = []
for x in lista:
if x % 2 == 1:
saida.append(x**2)
List comprehention
saida = [x**2 for x in lista if x % 2 == 1]
as 3 versões de list comprehention
[f(x) for x in lista if condicao(x)]
[f(x) for x in lista]
[x for x in lista if condicao(x)]
parecido com listas, mas sem duplicacao
>>> a = [1,2,3,4,5,4,5,3] <- lista
>>> print(a)
>>> a = {1,2,3,4,5,4,5,3} <- set
>>> print(a)
nao faz sentido acessar um elemento da lista (pelo indice)
>>> a[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object is not subscriptable
mas há várias operaçoes em set
veja em https://docs.python.org/3/library/sets.html
há operações entre 2 conjuntos e operacoes que convertem outros tipos para conjuntos
el in set
testa
add - inclui um elemento
update - inclui elementos de lista ou set
discard - remove um elemento
{ f(x) for x in set if condicao(x)}
import matplotlib.pyplot as plt
from collections import Counter
import string
def plot_frequency(entrada):
entrada = entrada.lower()
entrada = entrada.translate(str.maketrans('', '', string.punctuation + string.whitespace))
letter_counts = Counter(entrada)
sorted_letter_counts = sorted(letter_counts.items(), key=lambda x: x[1], reverse=True)
letters = [item[0] for item in sorted_letter_counts]
counts = [item[1] for item in sorted_letter_counts]
# Plotando o gráfico de barras
plt.bar(letters, counts)
plt.xlabel('Letras')
plt.ylabel('Frequência')
plt.title('Frequência de Letras (Ordenado)')
plt.show()