提供这个答案是为了完整性,因为numpy
已经在另一个答案中讨论过,并且将来自更高排名数组的值配对在一起通常很有用。
接受的答案适用于任何等级为 1 的序列/数组。但是,如果该序列具有多个级别(例如numpy
等级为 2 或更多的数组,也例如在 a list
of list
s 或tuple
of tuple
s 中),则需要遍历每个等级。下面是一个二维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)]