我有一个属性包含整数的对象列表。我正试图编写一个程序,根据这个整数(从高到低)对它们进行排序,如果有任何关联,则随机洗牌对象。(把它想象成掷硬币打破一条领带,但我希望它能起作用,即使有三条或更多的领带。)
下面是我编写的一些示例代码,它复制了我试图使用整数列表执行的操作。(当然,具有相同值的整数之间没有实际差异,但在实际程序中,对象具有其他属性。)
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
我遇到了一个无限循环,但我不知道为什么。我肯定会感谢一些见解,无论是关于我为什么循环,或者我如何能更有效地做到这一点
首先使用
shuffle
方法将列表随机排序,然后对其排序。那样的话,领带就已经随机排列了相关问题 更多 >
编程相关推荐