python - randrange() 的空范围 (1,1,0)
问题描述
我正在尝试使用 while 循环将列表拆分为训练数据和测试数据,但在运行一两次迭代后立即弹出 randrange() 错误。无法理解出了什么问题。摄取的 csv 文件有 767 行数据。下面是代码:
dataset = list(csv.reader(open("Data\diabetes.csv", 'r'), delimiter = ","))
trainSet = []
trainSize = int(0.67* len(dataset))
while len(trainSet) < trainSize:
x = len(dataset)
index = random.randint(1, x-1)
trainSet.append(dataset[index])
dataset = dataset.pop(index)
以下是错误:
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "C:\Users\Vikash Patel\AppData\Local\Programs\Python\Python38\lib\random.py", line 248, in randint
return self.randrange(a, b+1)
File "C:\Users\Vikash Patel\AppData\Local\Programs\Python\Python38\lib\random.py", line 226, in randrange
raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))
ValueError:randrange() 的空范围 (1, 1, 0)
解决方案
ValueError: empty range for randrange() (1, 1, 0)
当您尝试调用时发生random.randint(1, 0)
发生这种情况是因为当您想要弹出项目的数据集时,该行将dataset = dataset.pop(index)
您的数据集设置为等于弹出的项目(长度为 1)。然后,当您的循环下一次迭代时,x = len(dataset)
设置 x = 1,并且该行index = random.randint(1, x-1)
调用random.randint(1, 0)
.
试试这个:
import random
dataset = [10,11,12,13,14,15]
trainSet = []
trainSize = int(0.67* len(dataset))
while len(trainSet) < trainSize:
x = len(dataset)
index = random.randint(1, x-1)
trainSet.append(dataset[index])
# this changes the size of the dataset
dataset.pop(index)
输出:
> trainSet
[13, 12, 15, 14]
推荐阅读
- typescript - 扩展类型的泛型和 Typescript 中的普通类型有什么区别?
- sql - 如何将排序记录伪装成编辑器的行号
- sharepoint - 如何使用 Power App 检查 SharePoint 中的重复列表?
- node.js - 如何使用 node.js 从服务器端刷新浏览器?
- python - 如何在 Windows 上一致地分割路径
- pandas - Pandas Dataframe 重命名 Row 中的重复值
- php - 制作标签标签中心
- r - 添加新变量金融数据集 r
- python - 将子网内层的参数重用到该子网外的层
- python - ViewSet、ModelViewSet、APIView的区别