由于numpy 已在另一个答案中讨论过,因此提供此答案是为了完整性,并且将更高排名数组中的值配对在一起通常很有用。
accepted answer 适用于任何等级为 1 的序列/数组。但是,如果序列是多个级别的(例如等级为 2 或更多的numpy 数组,还例如在list lists 或 tuple tuples),需要遍历每个等级。下面是一个带有 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)]