Escreva uma função para condensar os elementos de uma lista ordenada L, que contém inteiros repetidos. Por exemplo, para
, a função retorna [3^4, 7^2, 13^2, 23] (repare que são strings). Note-se que no caso de um número aparecer uma única vez, não deve haver expoente unitário.
Passo 1
Beleza, vamos resolver esse exercício juntos! A gente precisa criar uma função que simplifique uma lista ordenada de números inteiros que podem se repetir. Por exemplo, se a lista for
[3,3,3,3,7,7,13,13,23]
, a função deve transformar isso em ["3^4", "7^2", "13^2", "23"]
. Vamos precisar usar conceitos de listas, laços de repetição e manipulação de strings para contar as repetições e formatar a saída corretamente.Passo 2
Primeiro, vamos entender que a lista está ordenada, o que facilita contar as repetições. A ideia é percorrer cada elemento da lista e contar quantas vezes ele se repete consecutivamente. Para isso, vamos usar um laço
for
que passa por cada número na lista.Passo 3
Vamos precisar de algumas variáveis para ajudar nessa contagem:
resultado
: uma lista onde vamos armazenar os resultados finais.numero_atual
: para guardar o número que estamos contando no momento.contagem
: para contar quantas vezes onumero_atual
aparece consecutivamente.
Passo 4
Inicialmente, vamos definir
numero_atual
como o primeiro elemento da lista e contagem
como 1, já que já temos uma ocorrência desse número. Em seguida, começamos a percorrer a lista a partir do segundo elemento.Passo 5
Dentro do laço, se o número atual for igual ao
numero_atual
, incrementamos a contagem
. Se for diferente, significa que as repetições daquele número terminaram. Então, precisamos adicionar ao resultado
a representação correta: se a contagem
for maior que 1, colocamos o número seguido de ^
e da contagem; se for 1, apenas o número como string. Depois, atualizamos numero_atual
para o novo número e resetamos a contagem
para 1.Passo 6
Após o laço, ainda temos que adicionar o último número contado ao
resultado
, já que ele não foi incluído dentro do laço.Passo 7
Por fim, a função retorna a lista
resultado
com todos os elementos condensados conforme o solicitado.Resposta
Aqui está a função em Python que realiza a condensação da lista:
def condensar_lista(L):
if not L:
return []
resultado = []
numero_atual = L[0]
contagem = 1
for numero in L[1:]:
if numero == numero_atual:
contagem += 1
else:
if contagem > 1:
resultado.append(f"{numero_atual}^{contagem}")
else:
resultado.append(str(numero_atual))
numero_atual = numero
contagem = 1
# Adiciona o último número
if contagem > 1:
resultado.append(f"{numero_atual}^{contagem}")
else:
resultado.append(str(numero_atual))
return resultado
# Exemplo de uso:
L = [3,3,3,3,7,7,13,13,23]
print(condensar_lista(L)) # Saída: ['3^4', '7^2', '13^2', '23']