我有一个字典,其中“Groups”键的第一个元素包含一个数组列表。
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)]
但是,在[:]
前添加另一个索引器/切片器,只需切片该列表的一部分。
无论如何要做这个没有循环?
谢谢。
答案 0 :(得分:1)
列表理解应该做的工作:
[row[2] for row in stump['Groups'][0]]
并将列表作为数组使用:
np.array([...])
此列表的元素
array(['a', 65000, 0], dtype=object)
是对象dtype数组,与相同内容的列表大致相同。他们有不同的价值观。
如果将整个列表包装在np.array
(或np.stack
)中,则会得到一个二维对象dtype数组
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)
可以将其编入索引为任何其他2d数组:
In [61]: arr[:,2]
Out[61]: array([0, 1, 1, 1], dtype=object)
astype(int)
可以将该对象数组转换为数字对象。由于字符串元素,无法转换完整的2d。
答案 1 :(得分:1)
list comprehension =>返回List对象
attr_accessor :name, :email
map function =>返回地图对象
column_list = [row[2] for row in stump['Groups'][0]]
itertools.imap function =>返回迭代器
column_map = map(lambda row: row[2], stump['Groups'][0])
numpy数组切片 - >返回numpy.array。 要求stump ['Groups'] [0]为numpy.array类型
column_iterator = itertools.imap(lambda row: row[2], stump['Groups'][0])