代码之家  ›  专栏  ›  技术社区  ›  JTA1618

如何在python中填充嵌套列表?

  •  0
  • JTA1618  · 技术社区  · 2 年前

    我有一个很长的嵌套列表,具有以下不规则结构:

    [[[1,2,3], [1,2,3], [1,2,3]],
     [[1,2,3], [1,2,3]],
     [[1,2,3], [1,2,3], [1,2,3], [1,2,3]],
      ...]
    

    我想在开始时用-10来填充它,如下所示:

    [[[-10,-10,-10], [-10,-10,-10], [1,2,3], [1,2,3], [1,2,3]],
     [[-10,-10,-10], [-10,-10,-10], [-10, -10, -10], [1,2,3], [1,2,3]],
     [[-10,-10,-10], [1,2,3], [1,2,3], [1,2,3], [1,2,3]],
      ...]
    

    其中嵌套列表的第二级有5个元素,每个元素有3个数字。

    我无法使用np.pad,因为我无法将不规则长度的列表转换为数组。

    提前谢谢你,因为我是个初学者。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Naetmul    2 年前

    您有一个由三元素列表组成的列表列表。 你想让它成为一个5元素列表或3元素列表的列表。 如果二级列表中没有足够的元素,则需要添加 [-10, -10, -10] 在列表的开头。

    new_list = []
    for second_level in old_list:
        new_second_level = [[-10, -10, -10]] * (5-len(second_level)) + second_level 
        new_list.append(new_second_level)
    

    我假设在第二层中没有6个或更多元素的列表。
    请注意,您可以使用*运算符多次复制列表。 作为示例,

    >>> [1, 2, 3] * 3
    [1, 2, 3, 1, 2, 3, 1, 2, 3]
    >>> [[1, 2, 3]] * 3
    [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
    

    在使用的简短版本中 list comprehension ,

    new_list = [[[-10, -10, -10]] * (5 - len(second_level)) + second_level for second_level in old_list]