我试图通过获取一个百分比来分割列表,然后从主列表中随机地抓取元素到另外两个列表中. trainingSet是左上方列表.当我生成一个随机索引来挑选时,我遇到了一个问题.这段代码适用于一个小列表,但当我使用(len(rawRatings)= 1000)时,它不起作用.
错误:
File "/Applications/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 1, in
# Used internally for debug sandbox under external interpreter
File "/Applications/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 29, in partitionRankings
File "/Users/rderickson9/anaconda/lib/python2.7/random.py", line 241, in randint
return self.randrange(a, b+1)
File "/Users/rderickson9/anaconda/lib/python2.7/random.py", line 217, in randrange
raise ValueError, "empty range for randrange() (%d,%d, %d)" % (istart, istop, width)
ValueError: empty range for randrange() (0,0, 0)
raw Ratings是一个列表,testPercent是一个浮点数.
恩.
rawRatings = [(123,432,4),(23,342,3),(23,123,5),(234,523,3),(34,23,1), (12,32,4)]
testPercent = .2
partitionRankings(rawRatings, testPercent)
[(23,123,5),(234,523,3),(34,23,1),(123,432,4),(12,32,4)],[(23,342,3)]
def partitionRankings(rawRatings, testPercent):
testSet = []
trainingSet = []
howManyNumbers = int(round(testPercent*len(rawRatings)))
declineRandom = 0
while True:
if declineRandom == howManyNumbers:
break
randomIndex = random.randint(0, (len(rawRatings)-1)-declineRandom)
testSetTuple = rawRatings[randomIndex]
del rawRatings[randomIndex]
testSet.append(testSetTuple)
declineRandom = declineRandom + 1
trainingSet = rawRatings[:]
return (trainingSet), (testSet)
我不想选择相同的随机索引.有一次,我选择一个,我不想再次随机选择它.我不认为这是正确的.这是我遇到麻烦的部分.
randomIndex = random.randint(0, (len(rawRatings)-1)-declineRandom)