【问题标题】:iterating over a changeable iterator in every iteration在每次迭代中迭代一个可变迭代器
【发布时间】:2019-03-06 17:49:33
【问题描述】:

我正在尝试实现下面的代码,但我收到了一个错误 “索引超出范围”。我想我收到了错误,因为 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

【问题讨论】:

    标签: python loops for-loop indexing


    【解决方案1】:

    无需修改数组,只需跟踪您有效的最后一个索引并在您点击它时突破。类似(未经测试)

    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
    

    【讨论】:

    • 谢谢你的回复,问题是我需要迭代这个函数。多次,如果是这样,最后一个索引将始终与数组的长度相同,我需要做的是删除通过 Comp 函数的元素,如果我再次使用此函数不同的 n 值之前通过 Comp 函数的元素将不再进行比较。我希望你能理解我蹩脚的英语
    • 你能在for循环完成后从last_index删除到最后吗?
    • 我在发表评论之前已经尝试过了,但它没有用,问题是它可以作为代码工作,但结果不是我所期望的我试图发布结果,但因为这个段是 400 多行代码的一部分,如果我发布结果或整个代码,这将是一个真正的错过,但无论哪种方式,我都要感谢您的回答
    • 我目前正在尝试修改原始函数,以便将最后一个索引作为另一个 arg。所以我可以在每次迭代中不断地减去它。
    猜你喜欢
    • 1970-01-01
    • 2021-10-05
    • 2021-10-15
    • 1970-01-01
    • 2021-08-24
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多