перебирая заменяемый итератор в каждой итерации - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь реализовать приведенный ниже код и получаю сообщение об ошибке msgstr "индекс вне диапазона". Я думаю, что получаю ошибку, потому что цикл for сохранил значение длины массива, в то время как я изменил его внутри самого цикла.

Я не могу понять, как решить эту проблему с помощью цикла for. Я решил это рекурсивным способом, но это было вычислительно дорого, и я имею дело с миллиардами слов. Кстати, функция Comp возвращает пул, только если два слова имеют одно и то же предложение, поэтому я считаю, что это не влияет.

Я использую Python-3, pycharm.

def reg(array,n):
    f=open(r"C:\Users\Ali\Desktop\love.txt","w")
    length= len(array)

    if length==1:
        return array
    k=0
    for item in range (length-1):
        k+=1
        for j in range(k,length):
            if Comp(array[item][0],array[j][0])>=n:
                f.write(str("\n"))
                f.write(str(array[item][1]))
                f.write(str("\n"))
                f.write(str(array[j+k ][1]))
                array[k+j]=array.pop()
                length-=1
                break
    f.close()
    pass

1 Ответ

1 голос
/ 06 марта 2019

Вместо того, чтобы модифицировать массив, просто следите за своим эффективным последним индексом и выходите из строя, когда вы нажимаете на него.Что-то вроде (не проверено)

k = 0
last_index = len(array) - 1
for item in range(length - 1):
    if item > last_index:
        break
    k += 1
    # ....
        array[k+j] = array[last_index]
        last_index -= 1
        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...