* 运算符和 zip() 函数的 Python 限制

标签 python memory zip

我有一段与此类似的 Python 代码:

for lines in zip(*files):
   # do something

其中 files 是一个文件列表,每个 file 是一个 lines 列表,每个 linestring 的列表。因此,上面的代码应该首先解压缩列表 files,然后应用函数 zip(),返回一个包含每个文件第一行的元组。问题是这工作得很好,如果文件列表的长度是 30(例如)。但是,如果长度更大,例如 120,则循环内的代码甚至不会执行一次。

结论是 zip() 函数返回一个空列表,或者 * 运算符没有完成它的工作。无论哪种方式,我的问题是 zip() 可以处理的参数是否有限制(或者 * 可以解压)或者它是否受到内存量的某种限制我的电脑有,因为我无法在 Python 的文档中找到任何内容。

PS:我正在运行 Python 2.4

最佳答案

如果其中一个文件为空,zip 将返回一个空列表。从 Python 2.6 开始,您可以使用 itertools.izip_longest来处理那个。在旧版本上,您可以使用 map(None, *files),由@Sven Marnach 提供。

关于* 运算符和 zip() 函数的 Python 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179663/

相关文章:

python - 读取流并传递给子进程

c - CVE-2015-0235 是如何触发和利用的?

java - 在 Activity 的 onDestroy() 中使用 Runtime.getRuntime().gc() 方法是一种好习惯吗?

c# - 在 C# 中使用 POST/httpwebrequest 上传 zip 文件

python - 我在构建 dockerfile 时出错了,我对此一无所知

python - Keras fit_generator 引发 ValueError 因为多个输入不正确

python - 使用来自单独文本文件的 ID 从 7 GB fasta 文件中提取多个序列

c - 使用 fopen() 打开的文本文件的内容是否会在堆栈中?

php - 打开 zip 并阅读内容

c++ - 在 C++ 中打开一个 zip 文件并将文件移动到另一个 zip 中?