Oi, Raquel.
Ele não usou porque não é necessário na estruturação da compreensão de listas.
Bem, eu vou tentar trazer o que está dentro daquela lista para algo mais próximo do português possível.
Vamos lá:
lista = [fruta.upper() for fruta in frutas]
Essa linha de código seria:
A lista vazia recebe o elemento fruta em maiúsculo para TODO o elemento fruta que estiver contido na lista de frutas
Vc percebeu que não precisou appendar(explicitamente com append ) nada pq a estrutura da compreensão de listas já te fornece e indica isso. Além disso, o .upper() já pode ser ser inicializado junto à variável que vc quer trabalhar nesse loop, no caso a fruta.
Eu diria que se vc é bem iniciante não tente se aventurar nessa estruturação agora. Quanto mais complexidade teu código for adquirindo mais difícil será utilizar a compreensão de listas.
Se é bem iniciante, sugiro dominar os loops e estruturas mais simples de dados primeiro ;)