回答:
Python 3では、 itertools.zip_longest
>>> list(itertools.zip_longest(a, b, c))
[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
パラメータNone
を使用する場合とは異なる値を埋め込むことができfillvalue
ます。
>>> list(itertools.zip_longest(a, b, c, fillvalue='foo'))
[('a1', 'b1', 'c1'), ('foo', 'b2', 'c2'), ('foo', 'b3', 'foo')]
Pythonの2を使用すると、いずれかを使用することができますitertools.izip_longest
(パイソンを2.6+)、またはあなたが使用することができますmap
しNone
。これはあまり知られていない機能ですmap
(ただしmap
、Python 3.xで変更されたため、これはPython 2.xでのみ機能します)。
>>> map(None, a, b, c)
[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
itertools
とにかく組み込みのCモジュールです。
Python 2.6xの場合、itertools
モジュールのを使用しますizip_longest
。
Python 3の場合は、zip_longest
代わりに使用します(先頭にはありませんi
)。
>>> list(itertools.izip_longest(a, b, c))
[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
six.moves.zip_longest
代わりに使用できます。
itertools以外のMy Python 2ソリューション:
if len(list1) < len(list2):
list1.extend([None] * (len(list2) - len(list1)))
else:
list2.extend([None] * (len(list1) - len(list2)))
2D配列を使用していますが、Python 2.xを使用した場合と同様の概念です:
if len(set([len(p) for p in printer])) > 1:
printer = [column+['']*(max([len(p) for p in printer])-len(column)) for column in printer]