将相同的元素附加到python中的几个子列表

时间:2016-05-02 11:59:48

标签: python list append nested-lists

我有一个像这样的列表列表:

L=[[[1,2,3],[4,5]],[[6,7,8,9],[10]]]

我想将整数11附加到子列表1和3.我可以做类似的事情:

L[0][2].append(11)
L[1][2].append(11)

在Python中有更简单的方法吗?

因为在我的情况下,让我们说我有一个包含100个子列表的列表,这些子列表有100个子列表(与(100,100) - 矩阵相当)我想从nb的子列表中附加一个值从10到20的子列表中有50到75个。

所以现在我做了类似的事情:

for i in range(10,21):
    for j in range(50,76):
        L[i][j].append(value)

有更有效的方法吗?和numpy数组一样,我们可以做

L=[10..21,50..76]=value

1 个答案:

答案 0 :(得分:2)

  

在这种情况下如何使用numpy数组,因为L [i] [j] .size随i和j而变化。在这种情况下是否可以使用数组?

是的,但在这种情况下,dtypeobject

L=[[[1,2,3],[4,5]],[[6,7,8,9],[10]]]
L=np.array(L) # L is a ndarray of list
# array([[[1, 2, 3], [4, 5]], [[6, 7, 8, 9], [10]]], dtype=object)
value=100
for i in L[0:1,0:2].flatten():
  i.append(value)
# array([[[1, 2, 3, 100], [4, 5, 100]], [[6, 7, 8, 9], [10]]], dtype=object)

在此示例中,Lnumpy.ndarraylist个对象。

type(L)
# <type 'numpy.ndarray'>
type(L[0,0])
# <type 'list'>

锯齿状阵列的算术运算

可以使用numpy对L之类的锯齿状数组执行高效的算术运算。

marr = np.vectorize(np.array,otypes=[np.ndarray])
L=[[[1,2,3],[4,5]],[[6,7,8,9],[10]]]
L=marr(L) # L is a ndarray of ndarray
L+L
# array([[array([2, 4, 6]), array([ 8, 10])],[array([12, 14, 16, 18]), array([20])]], dtype=object)