Мой текущий цикл, который я использую для сортировки элементов по их цифрам, создает индекс списка вне диапазона - PullRequest
0 голосов
/ 14 февраля 2019

Я полный нуб, и это часть моего первого алгоритма сортировки (Radixsort)

Пока этот способ сортировки чисел по соответствующим цифрам работает, но я все еще получаю индекс списка вне диапазона,Моя теория заключается в том, что цикл while требует дополнительной итерации, но я не понимаю, почему.

def put_into_bucket(liste, iteration):
iteration = int

digit = len(liste[0]) - 1
i = 0

while i < len(liste):
    if int(liste[i][digit]) == 0:
        zero.append(liste[i])
        print(zero)

    if int(liste[i][digit]) == 1:
        one.append(liste[i])
        print(one)


    if int(liste[i][digit]) == 2:
        two.append(liste[i])
        print(two)


    if int(liste[i][digit]) == 3:
        three.append(liste[i])
        print(three)


    if int(liste[i][digit]) == 4:
        four.append(liste[i])
        print(four)


    if int(liste[i][digit]) == 5:
        five.append(liste[i])
        print(five)


    if int(liste[i][digit]) == 6:
        six.append(liste[i])
        print(six)


    if int(liste[i][digit]) == 7:
        seven.append(liste[i])
        print(seven)


    if int(liste[i][digit]) == 8:
        eight.append(liste[i])
        print(eight)


    if int(liste[i][digit]) == 9:
        nine.append(liste[i])
        print(nine)
    i = i + 1

    print(sorted_array)

put_into_bucket (liste = ['0001', '0002', '0003', '0004', '0005', '0006'], итерация = 0)

1 Ответ

0 голосов
/ 14 февраля 2019

Как уже упоминалось jhnc , одной из проблем является проверка границ в операторе while.Это должно быть

while i < len(liste)

Я все еще думаю, что приращение должно быть вне проверки if, но вы говорите в комментариях, что перемещение его туда удваивает ваш результат.Поскольку это не MCVE , я не могу вам с этим помочь.

Поместите инкремент вне операторов if.После успешной проверки if следующий оператор if пытается использовать i, который может быть недействительным.

Пример

x = 1
if True:
    x += 1
if True:
    x += 1
print(x)

Вывод

3

Другой вариант - поместить операторы continue в конце каждого блока if, но вы действительно должны переместить инкремент из ifпроверяет, потому что тогда вы делаете это только в одном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...