Бесконечный цикл при попытке сортировки, разрывая связи случайным образом в Python

У меня есть список объектов, атрибуты которых включают в себя целое число. Я пытаюсь написать программу, которая будет сортировать их на основе этого целого числа (от высокого до низкого значения), и, если есть какие-либо связи, случайным образом перемешать объекты. (Думайте об этом, как о разрыве галстука, подбрасывая монету, но я хочу, чтобы это сработало, даже если есть три или более связей.)

Вот пример кода, который я написал, который повторяет то, что я пытаюсь сделать со списком целых чисел. (Конечно, нет никакой разницы между целыми числами с одинаковым значением, но в реальной программе объекты имеют другие атрибуты.)

import random as R
array = [25, 45, 10, 25, 15, 25]
sortedarray = sorted(array, reverse=True)
newarray = []
while len(sortedarray) > 1:
    if sortedarray[0] == sortedarray[1]:
        newarray.append(sortedarray.pop(0))
    else:
        challenge = sortedarray[0]
        samevalue = []
        while sortedarray[0] == challenge:
            samevalue.append(sortedarray.pop(0))
        while len(samevalue) > 0:
            sortedarray.append(samevalue.pop(R.randrange(len(samevalue))))

Я думаю: отсортировать список, а затем проверить, равны ли первое и второе значения. Если нет, это означает, что связи еще нет, поэтому pop() первое значение и append() его к newarray . Если они равны, это означает, что есть связь, поэтому pop() все элементы с этим значением в списке samevalue и pop() для newarray случайным образом.

Я нахожусь в бесконечном цикле, но я не могу понять, почему. Я определенно буду признателен за понимание, будь то, почему я зацикливаюсь, или как я могу сделать это более эффективно!

Всего 1 ответ


Как насчет перемешивания списка в случайном порядке сначала с использованием метода shuffle , а затем сортировки. Таким образом, связи будут уже в случайном порядке.


Есть идеи?

10000