Ошибка "IndexError: list index out of range" при нулевом индексе

def sort(list):
    x = list[0]
    less = []
    more = []
    if len(list) < 2:
        return list
    else:
        sort_list = [x]
        for i in list:
            if i < x:
                less.append(i)
            else:
                more.append(i)
        sort(less)
        sort(more)
        sort_list.append(more)
        sort_list.insert(0, less)
        return sort_list

sort([1, 2, 3])

Я попробовал написать свою функцию сортировки основанную на алгоритме быстрой сортировки. Но появляется ошибка:

Traceback (most recent call last):
  File "D:\Coding\Projects\1code.py", line 21, in <module>
    sort([1, 2, 3])
  File "D:\Coding\Projects\1code.py", line 14, in sort
    sort(less)
  File "D:\Coding\Projects\1code.py", line 2, in sort
    x = list[0]
IndexError: list index out of range

Как объект под нулевым индексом может отсутствовать?


Ответы (1 шт):

Автор решения: Дмитрий Игоревич

Во-первых не стоит использовать зарезервированные в python слова в качестве имён самописных функций и имён параметров (list, sort).

Во-вторых данная ошибка вполне может возникать когда список пустой. В Вашем случае функция рекурсивная и Вы сначала делаете так - less = [] , а потом ниже делаете так - sort(less).

В цикле:

for i in list:
    if i < x:
        less.append(i)
    else:
        more.append(i)

3 раза заходит в ветку с more.append, и список less остаётся пустой. И вы его передаёте в sort(), где пытаетесь обратиться к нулевому элементу, которого нет.

→ Ссылка