ça c'est parce que std::list<> ne fournit pas de RandomAccessIterator. Il te faut utiliser un std::vector<>, au moins temporairement
vector<int> temp(essai.begin(), essai.end());
random_shuffle(temp.begin(), temp.end());
essai = list<int>(temp.begin(), temp.end());