Python中*运算符和zip()函数的限制
我有一段类似这样的Python代码:
for lines in zip(*files):
# do something
在这里,files
是一个文件列表,每个file
又是一个行的列表,而每个line
则是一个字符串的列表。因此,上面的代码首先会把files
这个列表拆开,然后使用zip()
这个函数,返回每个文件的第一行组成的一个元组。问题是,当文件列表的长度是30的时候,这个代码运行得很好。但是,如果长度变得更大,比如120,循环里面的代码就一次都不会执行。
结论是,要么zip()
函数返回了一个空列表,要么*
这个操作符没有正常工作。不管怎样,我想问的是,zip()
能处理的参数有没有限制(或者*
能拆开的数量),还是说这受限于我电脑的内存,因为我在Python的文档里找不到相关的信息。
附注:我使用的是Python 2.4
1 个回答
9
如果其中一个文件是空的,zip
会返回一个空列表。从 Python 2.6 开始,你可以使用 itertools.izip_longest
来处理这种情况。在更早的版本中,你可以使用 map(None, *files)
,这是 @Sven Marnach 提供的解决方案。