python数组重复的最后一个值

时间:2015-05-21 05:09:39

标签: python arrays

我制作了一个小脚本,按升序排序随机数组。 一切都正确排序,但最后一个值(最大值)重复出现并抛出错误“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)

1 个答案:

答案 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

冒泡排序不是最快的排序,但它是最简单的排序之一,并且通常比你当前的技术更快地完成,这将非常慢。