我有一个类似于这个的Python代码:
for lines in zip(*files):
# do something
其中files
是文件列表,每个file
都是lines
的列表,每个line
都是string
的列表。因此,上面的代码应首先解压缩列表files
,然后应用函数zip()
,返回每个文件的第一行的元组。问题是这很好用,如果文件列表的长度是30(例如)。但是,如果长度较大,例如120,则循环内的代码甚至不会执行一次。
结论是zip()
函数返回空列表或*
运算符未执行其工作。无论哪种方式,我的问题是zip()
可以处理的参数是否存在限制(或*
可以解包),或者它在某种程度上受到我的计算机具有的内存量的限制,因为我没有能够在Python的文档中找到任何东西。
PS:我正在运行Python 2.4
答案 0 :(得分:9)
如果其中一个文件为空,zip
将返回一个空列表。从Python 2.6开始,您可以使用itertools.izip_longest
来处理它。在旧版本中,您可以使用map(None, *files)
,由@Sven Marnach提供。