numpy
以降の完全性のためにこの答えを提供することについては、別の答えで議論されており、上位のランク付けされた配列から値を組み合わせることはしばしば有用です。
accepted answer配列がlist
list
のSのように、また、そのようなランク2以上のnumpy
アレイなどの複数のレベル(であるが、場合しかし、ランク1の任意の配列/アレイの素晴らしい作品、またはtuple
,tuple
)、各ランクを反復する必要があります。以下2D numpy
アレイを有する例である:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([list('abc'), list('pdq'), list('xyz')])
c = np.array([[frobnicate(aval, bval) for aval, bval in zip(arow, brow)] for arow, brow in zip(a, b)])
同じ概念は、同一形状の二次元のネストされた配列の任意のセットのために動作します:一つまたはネストされた両方の場合
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [list('abc'), list('pdq'), list('xyz')]
c = [[frobnicate(aval, bval) for aval, bval in zip(arow, brow)] for arow, brow in zip(a, b)]
シーケンスがその中に「穴」があり、穴を埋めるためにitertools.zip_longest
を使用(None
にフィル値はデフォルトではなく指定することができます):
from itertools import zip_longest as zipl
a = [[], [4, 5, 6], [7, 8, 9]] # empty list in the first row
b = [list('abc'), list('pdq'), []] # empty list in the last row
c = [[frobnicate(aval, bval) for aval, bval in zipl(arow, brow)] for arow, brow in zipl(a, b)]
これを完全にするために、私は 'future_builtins'についても言及したいと思います。 – georg
したがって、python3のzipはitertools.izipと同じですか?それとも、リストのサイズによって変わるのですか? – will
@will:はい、Python3の 'zip'はPython2の' itertools.izip'と同じです。 (リストのサイズに応じて動作が変わることはありません)Python3で古い 'zip'動作を得るには' list(zip(a、b)) 'を使います。 – unutbu