首页 > 解决方案 > 一次将一个元素添加到多个列表中python

问题描述

我有一个二维列表数组,我想知道是否可以一次将一个元素附加到所有列表中,而无需使用双循环遍历所有元素。

假设我有这个列表数组:

matrix_of_lists = np.array([[2,3],[1]],
                           [[2,5,4],[2,5]]])

我想做类似的事情:

matrix_of_lists[:].append(6)
matrix_of_lists = np.array([[2,3,6],[1,6]],
                           [[2,5,4,6],[2,5,6]]])

我知道如何用两个循环来做到这一点,但我想优化/加速这个过程。我的列表数组已经在一个循环中并且非常大:1000*1000。

这可能是不可能的。非常感谢。

标签: pythonlist

解决方案


我怀疑您能否从矢量化中获得很多性能,因为您的数组最终存储了列表引用。但这是一种避免编写循环并适用于任意形状的方法。

@np.vectorize
def append_vec(mat, elt):
    mat.append(elt)


append_vec(matrix_of_lists, 1) # works inplace
# array([[list([2, 3, 1, 1]), list([1, 1])],
# [list([2, 5, 4, 1]), list([2, 5, 1])]], dtype=object)

一种更好的方法,无需创建 s 数组NaN

def append_vec(mat, elt):
    mat.append(elt)
    return None


append_vec = np.frompyfunc(append_vec, 2, 0)

推荐阅读