最長の長さにパディングするジップのような関数はありますか? 質問する

最長の長さにパディングするジップのような関数はありますか? 質問する

同じように動作するが、結果のリストの長さが最短入力ではなく最長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)]

ベストアンサー1

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 では、 (Python 2.6+) を使用するか、で をitertools.izip_longest使用できます。これは (のあまり知られていない機能ですが、Python 3.x で変更されたため、これは Python 2.x でのみ機能します)。mapNonemapmap

>>> map(None, a, b, c)
[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]

おすすめ記事