пустой диапазон для randrange () (1,1,0) - PullRequest
3 голосов
/ 05 апреля 2020

Я пытаюсь разделить список на тренировочные данные и проверить данные с помощью while l oop, но сразу после запуска итерации или двух появляется ошибка 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)

1 Ответ

1 голос
/ 05 апреля 2020

ValueError: empty range for randrange() (1, 1, 0) происходит, когда вы пытаетесь вызвать random.randint(1, 0)

Это происходит потому, что строка dataset = dataset.pop(index) устанавливает ваш набор данных равным элементу, который был удален (который имеет длину 1), когда Вы хотите, чтобы набор данных с предметом оторвался. Затем, когда ваш l oop повторяется в следующий раз, 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...