Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2021, 17:40   #1
RayOver
Пользователь
 
Регистрация: 16.07.2021
Сообщений: 18
По умолчанию Ошибка функции (list index out of range)

Всё просто, выполняю эту функцию и выдает ошибку.
если посавлю значения нужные для всего списка -- будет все ок, т.е если pivot = array[0], а в less и greater индексы будут [1:] -- все работает.

Но почему я не могу выбрать точку сортировки - середину, и лишь те числа что правее сортировать?


Код:
def quicksort(array):
    if len(array) < 2:
        return array
    else:
        pivot = array[5]
        less = [i for i in array[6:] if i <= pivot]
        greater = [i for i in array[6:] if i > pivot]
        return quicksort(less) + [pivot] + quicksort(greater)


print(quicksort([10, 25, 2, 5, 19, 125, 75, 34, 12, 15]))
Результат - IndexError: list index out of range
RayOver вне форума Ответить с цитированием
Старый 22.07.2021, 17:49   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Функция будет вызвана рекурсивно для более коротких списков, в которых нет 5го элемента.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.07.2021, 18:05   #3
RayOver
Пользователь
 
Регистрация: 16.07.2021
Сообщений: 18
По умолчанию

BDA, блин, точно, благодарю! Только тогда я не понимаю в чем смысл такой сортировки...
В книге пишется, что можно выбрать любой опорный элемент и от него сортировать.
Изображения
Тип файла: jpg Screenshot_3.jpg (43.5 Кб, 1 просмотров)
RayOver вне форума Ответить с цитированием
Старый 22.07.2021, 18:06   #4
RayOver
Пользователь
 
Регистрация: 16.07.2021
Сообщений: 18
По умолчанию

или я что то не так понял.
Изображения
Тип файла: jpg Screenshot_4.jpg (61.6 Кб, 0 просмотров)
RayOver вне форума Ответить с цитированием
Старый 22.07.2021, 18:09   #5
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Именно... Вы слово "рекурсивно" видите? Опорный элемент выбирается тоже рекурсивно. И никто не пишет конкретных индексов (если опрный не 0, конечно), а вычисляется.
ForenLi вне форума Ответить с цитированием
Старый 22.07.2021, 18:13   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Можно брать любой, просто нельзя брать фиксированный номер, который больше длины массива. Например, брать номер len(array) // 2.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.07.2021, 18:27   #7
RayOver
Пользователь
 
Регистрация: 16.07.2021
Сообщений: 18
По умолчанию

BDA, Принял, осознал.
RayOver вне форума Ответить с цитированием
Старый 22.07.2021, 18:30   #8
RayOver
Пользователь
 
Регистрация: 16.07.2021
Сообщений: 18
По умолчанию

Цитата:
Сообщение от ForenLi Посмотреть сообщение
И никто не пишет конкретных индексов
может не пишется, откуда мне знать, в книге написано, что можно выбрать, я выбрал -- не работает.
сразу не дошло, что в двух созданных списках может не быть индекса.
RayOver вне форума Ответить с цитированием
Старый 23.07.2021, 12:53   #9
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от RayOver Посмотреть сообщение
я выбрал -- не работает.
Так не выбрали. У вас на входе массив из 4 элементов, как вы "выбрали" 6й?
ForenLi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему при вводе отрицательных значений элементов списка, компилятор выдает ошибку (IndexError: list index out of range)? smi Python 2 22.02.2020 21:01
Ошибка List Index out of bounds Rapala Помощь студентам 1 03.05.2010 17:33
Ошибка List index of bounds(1) Blue Heron Помощь студентам 5 17.03.2010 00:38
ошибка:List index out of bounds tanek Помощь студентам 7 26.12.2009 20:38
Табулирование функции. Ошибка 'List index out of bounds(0)' Мэр Общие вопросы Delphi 2 03.06.2009 09:11