首页 > 解决方案 > 尝试排序时的无限循环,在 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()具有该值的所有项目都进入 list samevalue,而pop()那些项目newarray是随机的。

我遇到了一个无限循环,但我不知道为什么。我肯定会很感激一些见解,无论是关于我为什么要循环还是如何更有效地做到这一点!

标签: pythonwhile-loop

解决方案


首先使用该方法将列表改组为随机顺序shuffle,然后对其进行排序。这样,关系就已经是随机顺序了。


推荐阅读