zip-как функция, которая прокладывает до самой длинной длины?
есть ли встроенная функция, которая работает как zip()
но это будет дополнять результаты так, что длина результирующего списка равна длине длинной вход, а не короткий вход?
>>> a=['a1']
>>> b=['b1','b2','b3']
>>> c=['c1','c2']
>>> zip(a,b,c)
[('a1', 'b1', 'c1')]
>>> What command goes here?
[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
3 ответа:
в Python 3 Вы можете использовать
itertools.zip_longest
>>> list(itertools.zip_longest(a, b, c)) [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
вы можете заполнить с другим значением, чем
None
С помощью :>>> list(itertools.zip_longest(a, b, c, fillvalue='foo')) [('a1', 'b1', 'c1'), ('foo', 'b2', 'c2'), ('foo', 'b3', 'foo')]
С Python 2 Вы можете использовать
itertools.izip_longest
(в Python 2.6+), или вы можете использоватьmap
СNone
. Это малоизвестно особенностьmap
(аmap
изменено в Python 3.x, так что это работает только в Python 2.икс.)>>> map(None, a, b, c) [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
для Python 2.6 x Используйте
itertools
модульizip_longest
.для Python 3 Используйте
zip_longest
(неi
).>>> list(itertools.izip_longest(a, b, c)) [('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]