Бесконечный L oop при попытке сортировки случайным образом разрывая связи в Python - PullRequest
0 голосов
/ 12 февраля 2020

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

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

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))))

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

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

1 Ответ

1 голос
/ 12 февраля 2020

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

...