Удовлетворяет ли это вашим потребностям («удовлетворительно» немного расплывчато), чтобы гарантировать, что каждый непустой элемент мозаики был заменен одним другим непустым элементом мозаики один раз?
Скажем, у вас есть список:
(1,4,7,3,8,10)
мы можем записать признаки списка
(0,1,2,3,4,5)
и выполните N случайных перестановок индексов, чтобы перетасовать его - возможно, некоторые числа сдвигаются, а некоторые нет.
(5,1,3,2,4,0)
Затем возьмите их попарно как последовательность перестановок в нашем исходном списке.
(8,10,3,7,1,4)
если у вас нечетное количество элементов, остаток заменяется любым другим элементом в списке.