尝试排序时无限循环,在Python中随机断开连接

2024-09-23 22:29:06 发布

您现在位置: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

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


Tags: 对象程序列表len属性排序整数array