Ограничение Python для оператора * и функции zip () - PullRequest
5 голосов
/ 03 марта 2011

У меня есть код Python, похожий на этот:

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

, где files - это список файлов, каждый file - это список lines, а каждый line - это списоксписок string с.Поэтому приведенный выше код должен сначала распаковать список files, а затем применить функцию zip(), возвращающую кортеж с первой строкой каждого файла.Проблема в том, что это работает просто отлично, , если длина списка файлов равна 30 (например).Однако, если длина больше, например 120, код внутри цикла не будет выполнен ни разу.

Вывод таков: функция zip() возвращает пустой список или *Оператор 1016 * не выполняет свою работу.В любом случае, мой вопрос: есть ли ограничение в аргументах, которые zip() может обработать (или * может распаковать), или оно каким-то образом ограничено объемом памяти, который есть у моего компьютера, так как я не смогчтобы найти что-нибудь в документации Python.

PS: я использую Python 2.4

1 Ответ

9 голосов
/ 03 марта 2011

Если один из файлов пуст, zip вернет пустой список.Начиная с Python 2.6 вы можете использовать itertools.izip_longest, чтобы справиться с этим.В старых версиях вы можете использовать map(None, *files), любезно предоставлено @Sven Marnach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...