Escreva uma função para condensar os elementos de uma lista ordenada L, que contém inteiros repetidos. Por exemplo, para L=[3,3,3,3,7,7,13,13,23], 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 o numero_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']

Exercícios relacionados