Avevo il tuo stesso problema, quello che ho fatto è stato utilizzare il line profiler per trovare l'istruzione più onerosa in termini di tempi d'esecuzione e cercare di sostituirla con istruzioni più semplici. Nel mio caso eliminavo ogni volta la parola giocata dalla lista, che, pur non essendo un operazione molto dispendiosa, quando veniva svolta molte volte nei test più grandi impiegava molto tempo.
Nota: se il timeout viene superato l'esecuzione viene interrotta, quindi i 7 ms di troppo non sono il tempo effettivo in cui la tua funzione viene completata ma il tempo in cui viene interrotta.