对二维列表中的值执行操作并将每个子列表附加到新列表
performing operations on values in 2-D list and appending each sub-list to new list
我有两个二维 python 数组列表。我想在每个数组中的每个值上相互执行操作并将该值附加到列表中,同时保留二维结构。
比如我有
list1 = [[1,2,3],[4,5,6],[7,8,9]]
list2 = [[3,2,1],[6,5,4],[9,8,7]]
我想这样做(例如只是简单的加法)输出是
output_list: [[4,4,4],[10,10,10],[16,16,16]]
在我的例子中,我正在计算标准偏差。
我有两个名为 rolling_mean
和 mean_std
的二维列表,我正在对其进行并行迭代并附加到名为 lower_bound
的列表
lower_bound = []
for k,h in zip(range(len(rolling_mean)),range(len(mean_std))):
for l,m in zip(range(len(rolling_mean[k])),range(len(mean_std[h]))):
lower_bound.append(rolling_mean[k][l] - (1.96 * mean_std[h][m]))
print(lower_bound)
这给了我正确的输出,但所有值都在一个数组中。我希望它是一个二维数组,就像上面的示例输出一样。
...
lb_part = []
for l,m ...
lb_part.append(...)
lower_bound.append(lb_part)
通用函数 reczip
和 recmap
可能对您有用 -
def reczip(a,b,f=tuple):
if isinstance(a, list) and isinstance(b, list):
return list(reczip(v, b[i], f) for (i,v) in enumerate(a))
else:
return f((a,b))
x = [[1,2,3],[[4],[5,6]],9]
y = [[3,2,1],[[6],[5,4]],9]
print(reczip(x,y))
[[(1, 3), (2, 2), (3, 1)], [[(4, 6)], [(5, 5), (6, 4)]], (9, 9)]
def recmap(a,f):
if isinstance(a, list):
return list(recmap(v, f) for v in a)
else:
return f(a)
print(recmap(reczip(x,y),sum))
[[4, 4, 4], [[10], [10, 10]], 18]
如您所见,这些适用于任何嵌套级别的列表。但是,如果reczip
遇到不对称的形状,可以相应处理-
def reczip(a,b,f=tuple):
try:
if isinstance(a, list) and isinstance(b, list):
return list(reczip(v, b[i], f) for (i,v) in enumerate(a))
else:
return f((a,b))
except IndexError:
return f((a,b)) # when a and b have different number of elements
我有两个二维 python 数组列表。我想在每个数组中的每个值上相互执行操作并将该值附加到列表中,同时保留二维结构。
比如我有
list1 = [[1,2,3],[4,5,6],[7,8,9]]
list2 = [[3,2,1],[6,5,4],[9,8,7]]
我想这样做(例如只是简单的加法)输出是
output_list: [[4,4,4],[10,10,10],[16,16,16]]
在我的例子中,我正在计算标准偏差。
我有两个名为 rolling_mean
和 mean_std
的二维列表,我正在对其进行并行迭代并附加到名为 lower_bound
lower_bound = []
for k,h in zip(range(len(rolling_mean)),range(len(mean_std))):
for l,m in zip(range(len(rolling_mean[k])),range(len(mean_std[h]))):
lower_bound.append(rolling_mean[k][l] - (1.96 * mean_std[h][m]))
print(lower_bound)
这给了我正确的输出,但所有值都在一个数组中。我希望它是一个二维数组,就像上面的示例输出一样。
...
lb_part = []
for l,m ...
lb_part.append(...)
lower_bound.append(lb_part)
通用函数 reczip
和 recmap
可能对您有用 -
def reczip(a,b,f=tuple):
if isinstance(a, list) and isinstance(b, list):
return list(reczip(v, b[i], f) for (i,v) in enumerate(a))
else:
return f((a,b))
x = [[1,2,3],[[4],[5,6]],9]
y = [[3,2,1],[[6],[5,4]],9]
print(reczip(x,y))
[[(1, 3), (2, 2), (3, 1)], [[(4, 6)], [(5, 5), (6, 4)]], (9, 9)]
def recmap(a,f):
if isinstance(a, list):
return list(recmap(v, f) for v in a)
else:
return f(a)
print(recmap(reczip(x,y),sum))
[[4, 4, 4], [[10], [10, 10]], 18]
如您所见,这些适用于任何嵌套级别的列表。但是,如果reczip
遇到不对称的形状,可以相应处理-
def reczip(a,b,f=tuple):
try:
if isinstance(a, list) and isinstance(b, list):
return list(reczip(v, b[i], f) for (i,v) in enumerate(a))
else:
return f((a,b))
except IndexError:
return f((a,b)) # when a and b have different number of elements