python:如何删除列表中嵌套列表的括号

时间:2017-12-07 03:00:17

标签: python arrays list numpy split

我有一个不同大小的不同数组的列表

list = [array1,array2,array3,array4,array5]

现在我想用split函数拆分其中一个数组

newlist = [array1, np.vsplit(array2,3), array3,array4,array5]

制作新名单

newlist = [array1,array21,array22,array23,array3,array4,array5]

但是,我得到的内容总是包含新列表中的列表

newlist = [array1,[array21,array22,array23],array3,array4,array5]

如何删除括号并生成我想要的内容?

我相信应该有一个非常简单的解决方案,但我已经尝试过搜索而无法得到答案。

2 个答案:

答案 0 :(得分:2)

您可以先将其余元素包装在不同的列表中,直接添加列表:

[array1] + np.vsplit(array2,3) + [array3, array4, array5]

或更好,您可以切片list

list[:1] + np.vsplit(list[1], 3) + list[2:]

答案 1 :(得分:2)

split创建一个数组列表:

In [115]: np.split(np.arange(10),2)
Out[115]: [array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9])]

当您创建包含数组和列表的新列表时,您将获得列表中的列表。这只是正常的列表操作:

In [116]: [np.arange(3),np.split(np.arange(10),2),np.array([3,2])]
Out[116]: 
[array([0, 1, 2]),
 [array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9])],
 array([3, 2])]

有多种方法可以展平或扩展这样的嵌套列表。一个是*运算符。它在函数参数中很常见,例如func(*[alist]),但是新的Pythons在这样的列表中工作:

In [117]: [np.arange(3),*np.split(np.arange(10),2),np.array([3,2])]
Out[117]: 
[array([0, 1, 2]),
 array([0, 1, 2, 3, 4]),
 array([5, 6, 7, 8, 9]),
 array([3, 2])]

简单列表示例:

In [118]: [1, [2,3,4], 5]
Out[118]: [1, [2, 3, 4], 5]
In [119]: [1, *[2,3,4], 5]
Out[119]: [1, 2, 3, 4, 5]

(这在Python2中不起作用;列表连接更容易使用,[0] + [1,2,3] + [4],如@Psidom所示)