我制作了一个小脚本,按升序排序随机数组。 一切都正确排序,但最后一个值(最大值)重复出现并抛出错误“ValueError:list.remove(x):x not in list”。
基本上脚本的工作原理是,使用for循环获取最小值,将其删除并将其添加到新数组中。继续这样做,一切都被排序。 我附上我的代码,非常感谢任何帮助。我很抱歉打算关闭,格式化搞砸了。
from random import randint
from random import sample
import random
global randomnum
def generateArray(size,lowerBound,upperBound):
array = []
array = random.sample(range(lowerBound,upperBound),size)
return array
def sortArray(size,lowerBound,upperBound):
useArray = generateArray(size,lowerBound,upperBound)
print useArray
arraysize = len(useArray)
counter = 1
minval = 0
difsize = arraysize -1
actualVal =0
newArray =[]
for i in range(0,arraysize+difsize):
for n in range(0,arraysize-1):
if useArray[minval] < useArray[counter]:
counter = counter +1
actualVal = useArray[minval]
else:
minval = counter
actualVal = useArray[counter]
counter = counter +1
arraysize = arraysize -1
counter =1
minval =0
# Adding this code fixed it
if i + arraysize ==i:
newArray.extend(useArray)
return newArray
print actualVal
#t = len(newArray)
#print t
newArray.append(actualVal)
useArray.remove(actualVal)
return newArray
print sortArray(10,1,30)
答案 0 :(得分:0)
您遇到的一个实际问题是,您使用索引arraysize+difsize
踩过数组大小以上的数据时,您在给定结果中存在多个值的可能性很小,尤其是大小很大,范围很小,remove
将删除所有出现的情况。
为什么不使用内置设施中的pythons。 尝试:
import random
def generateArray(size,lowerBound,upperBound):
""" Generate a random array as required """
array = random.sample(range(lowerBound,upperBound),size)
return array
def sortArray(size,lowerBound,upperBound):
""" Generate a sorted random array """
useArray = generateArray(size,lowerBound,upperBound)
print useArray
useArray.sort()
print useArray
return useArray
如果必须手动尝试冒泡排序:
def sortArray(size,lowerBound,upperBound):
""" Generate a sorted random array """
useArray = generateArray(size,lowerBound,upperBound)
print useArray
changed = True:
while changed:
changed = False
for n in xrange(size-1):
if useArray[n] > useArry[n+1]:
useArray[n], useArry[n+1] = useArray[n+1], useArry[n]
changed = True
return useArray
冒泡排序不是最快的排序,但它是最简单的排序之一,并且通常比你当前的技术更快地完成,这将非常慢。