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

6 投票
1 回答
3071 浏览
提问于 2025-04-16 12:54

我有一段类似这样的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 提供的解决方案。

撰写回答