2017-04-16 70 views
-1

我有一个字典,它的第一个元素'Groups'包含一个数组列表。从数组列表中切出每个数组的第三个元素(Python)

stump['Groups'][0] 

[array(['a', 65000, 0], dtype=object), 
array(['a', 95000, 1], dtype=object), 
array(['b', 78000, 1], dtype=object), 
array(['b', 19000, 1], dtype=object)] 

我想切片每行的第三列并对它们做一些操作。 所以第三列值是[0,1,1,1]。

stump['Groups'][0][:] 
#results in the whole list 
[array(['a', 65000, 0], dtype=object), 
array(['a', 95000, 1], dtype=object), 
array(['b', 78000, 1], dtype=object), 
array(['b', 19000, 1], dtype=object)] 

然而,在前面[:]添加另一分度器/限幅器,只是该切片列表的一部分。

无论如何做到这一点没有循环?

谢谢。

回答

1

列表理解应该做的工作:

[row[2] for row in stump['Groups'][0]] 

,并与该列表作为一个数组的工作:

np.array([...]) 

array(['a', 65000, 0], dtype=object) 

是对象D类的这个列表的元素数组,大致与相同事物的列表相同。他们有不同的价值观。

如果包裹在np.array(或np.stack)整个列表,你得到一个2D对象D型数组

In [58]: arr=np.array(alist) 
In [59]: arr.shape 
Out[59]: (4, 3) 
In [60]: arr 
Out[60]: 
array([['a', 65000, 0], 
     ['a', 95000, 1], 
     ['b', 78000, 1], 
     ['b', 19000, 1]], dtype=object) 

可被索引任何其他二维数组:

In [61]: arr[:,2] 
Out[61]: array([0, 1, 1, 1], dtype=object) 

astype(int)可以把将该对象数组转换为数字。由于字符串元素,完整的2d不能被转换。

+0

是的,我忘了,我可以只是把列表转换成阵列,这将允许我索引就像任何2D阵列。谢谢=) – Moondra

1

列表理解=>返回列表对象

column_list = [row[2] for row in stump['Groups'][0]] 

地图功能=>返回地图对象

column_map = map(lambda row: row[2], stump['Groups'][0]) 

itertools.imap功能=> iterator返回

column_iterator = itertools.imap(lambda row: row[2], stump['Groups'][0]) 

numpy的阵列片 - >返回numpy.array。 要求残端[“群组”] [0]是numpy.array类型的

columns_array = stump['Groups'][0][:,2] 
相关问题