Python 从多维列表中获取列

Python 从多维列表中获取列,python,multidimensional-array,Python,Multidimensional Array,我有一个非常复杂的嵌套列表:每个元素是一个包含两个元素的元组:一个是对象,另一个是3x2xn数组。这是一个玩具模型 toy=[('mol1',array([[[1,1,1],[2,2,2]],[[1,1,1],[2,2,2]]])),('mol2',array([[[1,1,1],[2,2,2]],[[1,1,1],[2,2,2]]]))] 我怎样才能从中得到一列呢 我在找 ('mol1', 'mol2') 对于2D阵列,如: array([[1,1,1],[1,1,1],[1,1,1],

我有一个非常复杂的嵌套列表:每个元素是一个包含两个元素的元组:一个是对象,另一个是3x2xn数组。这是一个玩具模型

toy=[('mol1',array([[[1,1,1],[2,2,2]],[[1,1,1],[2,2,2]]])),('mol2',array([[[1,1,1],[2,2,2]],[[1,1,1],[2,2,2]]]))]
我怎样才能从中得到一列呢

我在找

('mol1', 'mol2') 
对于2D阵列,如:

array([[1,1,1],[1,1,1],[1,1,1],[1,1,1]])
我有一个解决方案,但我认为它效率很低:

zip(*toy)[0]
>>> tuple(t[0] for t in toy)
('mol1', 'mol2')
它回来了

('mol1', 'mol2')
然后

返回

array([[1, 1, 1],
   [1, 1, 1]])
像那样的自行车

for i in range(len(toy)):
    zip(*toy)[1][i][:,0]

提供列的所有元素,我可以使用vstack构建它,这应该是相当有效的:

zip(*toy)[0]
>>> tuple(t[0] for t in toy)
('mol1', 'mol2')
对于2D阵列,借助numpy的vstack函数:

>>> from numpy import vstack
>>> vstack([t[1][:, 0] for t in toy])
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])

您可以使用numpy中的数组来存储数据或将数据转换为数据,然后使用内置的列切片功能。通常,numpy切片速度非常快

import numpy as np
np.asarray(toy)[::, 0] # first column

# output
array(['mol1', 'mol2'], 
      dtype='|S4')
你能澄清一下最终想要的产量吗?