我有一段与此类似的 Python 代码:
for lines in zip(*files):
# do something
其中 files
是一个文件列表,每个 file
是一个 lines
列表,每个 line
是string
的列表。因此,上面的代码应该首先解压缩列表 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/