基于第一列将成对数组转换为二维数组

2024-06-02 08:00:09 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中有没有一种(最好是优雅的)方法来获取对数组,比如

[[3,350],[4,800],[0,150],[0,200],[4,750]]

像这样

^{pr2}$

是吗?在

在第二个数组中,每一个第二个数组中的一个好的索引是什么?在


Tags: 方法数组pr2
3条回答

试着看看列表理解,它们提供了创建列表的一种简单方法。如果你不知道他们是什么,这是一个相当不错的指南,让你开始here。另外,看看tuple,因为它们更适合成对值,而不是列表。注意元组是不可变的,因此一旦创建元组就不能进行更改。在

使用元组的列表如下所示

foo = [(3,350),(4,800),(0,200),(4,750)]

据我所知,Python列表没有预定义的大小,而是随着更改的进行而增长和收缩。所以,您要做的是找到列表中最大的索引值,或者foo = [x[0] for x in list_of_pairs] 将访问主列表中每个列表的第一个索引,名为list_of_pairs。请注意,此策略也适用于基于tuple的列表。在

下面应该做你想做的

^{pr2}$

我将使用pandas模块执行此任务:

In [186]: a = np.array([[3,350],[4,800],[0,150],[0,200],[4,750]])

In [187]: res = pd.DataFrame(a).groupby(0)[1].apply(list).to_frame('val').rename_axis('idx')

In [188]: res
Out[188]:
            val
idx
0    [150, 200]
3         [350]
4    [800, 750]

现在您有了一个索引数据集,可以按以下方式使用它:

^{pr2}$

PS我认为你不必在结果数据集中保留空列表-因为这是浪费资源

正如@thefourtheye所说,dict可能是更好的容器。如果你想要2dlist,你可以先添加一个中间值dict,其中key是行,value是数字列表。然后您可以使用列表理解来生成最终结果:

>>> l = [[3,350],[4,800],[0,150],[0,200],[4,750]]
>>> d = {}
>>> for row, num in l:
...     d.setdefault(row, []).append(num)
...
>>> [d.get(i, []) for i in range(max(d.keys()) + 1)]
[[150, 200], [], [], [350], [800, 750]] 

相关问题 更多 >