Em primeiro lugar, para se ver o paralelismo entre os dois paradigmas de programação, o chamado imperativo (que consiste, como o nome diz em dar ordens ao computador) e o funcional, que descarta por completo o uso de variáveis, usa menos memória, e, como já deves ter percebido é muito mais compacto, vou resolver o problema das duas formas. Volto a referir que eu não sei Python, apenas sei programação de forma genérica e simplesmente combino-a com algumas caracteristicas úteis do Python, como, suporte para programação funcional, e todo o conjunto de métodos de string disponiveis, entre outras.
Método 1 - Paradigma imperativo
A forma mais directa de resolver o teu problema, é usar um idioma muito comum para resolver vários problemas, a que eu gosto de chamar acumulador ou contador conforme o caso. Neste caso, o nosso acumulador vai ser uma string vazia, a que eu vou chamar, palavra.
- Código: Seleccionar Todos
palavra = ""
lista = ['M', 'e', 's', 's', 'i']
Portanto, em cima tenho uma string vazia, chamada palavra, que irá acumular os vários caracteres da lista, para formar a palavra desejada.
Relembro que, uma string é entendida como uma cadeia de caracteres, o que significa que se fizeres no interpretador:
1 + 2, ele devolver-te-á como resultado 3.
Mas se fizeres, '1' + '2', ele devolver-te-á como resultado, 12, pois agora '1' e '2' são caracteres, esta soma "especial" de caracteres, tem um nome que é concatenação.
Assim, vês que ao teres 'c' +'a' +'s' +'a', terás a palavra casa.
Para resolver o nosso problema, temos então de adicionar cada elemento da lista à string palavra, para termos o resultado. Fazemos isso com um ciclo for:
- Código: Seleccionar Todos
for i in range(len(lista)):
palavra = palavra + lista[i]
onde a variável do ciclo, i, serve como indice para cada um dos elementos da lista. Repara que teres: range(10), é equivalente a teres: range(0, 10), isto já é mais pitónico

por fim, escrevemos a palavra no ecrã, que será o nome do Melhor Jogador do Mundo.
Método 2 - Paradigma funcional
O método funcional, é, como já disse atrás, muito mais compacto, porque usa simplesmente funções implementadas na linguagem, que operam directamente sobre listas, e evita a criação de um acumulador, que tem a desvantagem de ocupar espaço na memória (embora torne o código mais legível).
Para esta explicação, começar-se-ão por apresentar 3 conceitos novos:
[*] Lambda functions;
[*] A função reduce;
[*] Listas passadas a funções por compreensão;
As funções lambda ou funções anónimas, têm este nome, pois não estão agarradas a nenhum identificador, isto é, não é necessário atribuir nenhuma variável especifica para guardar resultados da chamada da função, mas talvez a wikipedia explique isto melhor que eu.
As funções lambda, na sua forma mais simples, recebem um argumento, fazem alguma coisa com ele e retornam o valor dessa alguma coisa (uma operação qualquer)
Eis uma lambda function que eleva um número ao quadrado:
- Código: Seleccionar Todos
Quad = lambda x: x**2
O argumento da função, chamada Quad, é um número x, e a função retorna o quadrado de x, pelo que, ao escreveres isto no interpretador, podes depois fazer simplesmente:
Quad(10), que te dará 100 como resultado.
A função reduce, recebe como argumento, uma função lambda, e uma lista, e aplica essa mesma função aos elementos da lista até a reduzir a um único elemento, ou esgotar os elementos da lista.
Listas por compreensão são, basicamente, listas criadas, na hora, ou seja, para criar por compreensão uma lista com os 10 primeiros números, pode-se fazer:
- Código: Seleccionar Todos
L = [x for x in range(1,11)]
Juntando tudo isto no mesmo exemplo, vamos começar a raciocinar "de dentro" para "fora".
Temos uma lista que contém os elementos que queremos adicionar:
- Código: Seleccionar Todos
lista = ['M', 'e', 's', 's', 'i']
De seguida, temos então de criar uma lista por compreensão, que nos vai dizer, qual elemento da lista chamada lista, estamos a adicionar:
- Código: Seleccionar Todos
[ lista[i] for i in range(len(lista)) ]
Agora criamos uma função lambda que nos diz qual é a operação que queremos realizar sobre a nossa lista, neste caso, somar (mais correctamente, concatenar) os seus elementos, pelo que:
- Código: Seleccionar Todos
lambda x,y: x+y
Por fim, queremos que a função lambda de soma, seja aplicada até todos os caracteres da lista serem um só: é a nossa palavra!!!
Para isso aplicamos a função reduce, que receberá como argumentos, a função anómina e a lista por compreensão:
- Código: Seleccionar Todos
lista = ['M', 'e', 's', 's', 'i']
reduce( lambda x,y: x+y , [ lista[i] for i in range(len(lista)) ] )
Cá está novamente o Melhor Jogador do Mundo, agora concatenado via programação funcional

PS: Desculpem o testamento