gpt4 book ai didi

尝试浏览大型列表时出现 Python IndexError

转载 作者:太空宇宙 更新时间:2023-11-03 12:19:40 24 4
gpt4 key购买 nike

我有一个包含大约 200 000 多个对象的列表,每个对象代表一个文件(但实际上并不包含文件的内容,只是完整的路径名和日期)。

我正在编写的程序会根据用户提供的日期范围复制这些文件的任何子集。我首先创建源目录中所有文件的列表(使用 glob 模块),创建我的文件表示类的实例并将该实例添加到列表中,如下所示:

for f in glob.glob(srcdir + "/*.txt"):
LOG_FILES.append(LogFile(f))

现在,为了保持文件的快速复制和代码块的清洁,我删除了不适合日期范围的 LogFile 对象。

for i in xrange(0, len(LOG_FILES)):
if LOG_FILES[i].DATE < from_date or LOG_FILES[i].DATE > to_date:
del(LOG_FILES[i])

之后,我可以只复制列表中剩余的文件:

for logfile in LOG_FILES:
os.copy(logfile.PATH, destdir)

问题出现在 for i in xrange... 示例中:当 i 的值达到 63792 时,我抛出一个 IndexError。

IndexError: list index out of range.

有什么想法吗?

编辑 非常感谢您的快速回复!现在回想起来,这对我来说是一个愚蠢的疏忽。再次感谢大家。 :)

最佳答案

来自 the docs :

It is not safe to modify the sequence being iterated over in the loop (this can only happen for mutable sequence types, such as lists). If you need to modify the list you are iterating over (for example, to duplicate selected items) you must iterate over a copy.

对于您的情况,我实际上建议研究使用生成器表达式和 itertools.ifilter ,以避免对您的大文件列表进行不必要的复制。

关于尝试浏览大型列表时出现 Python IndexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com