gpt4 book ai didi

python - 基于另一个列表对列表元素进行分组

转载 作者:太空宇宙 更新时间:2023-11-03 16:10:16 25 4
gpt4 key购买 nike

我有两个列表:inpbase

我想根据 base 中的位置将 inp 中的每个项目添加到 out 中的列表中。

下面的代码工作正常:

from pprint import pprint as print

num = 3
out = [[] for i in range(num)]
inp = [[1,1],[2,1],[3,2],[7,11],[9,99],[0,-1]]
base = [0,1,0,2,0,1]

for i, num in enumerate(base):
out[num].append(inp[i])
print(out,width=40)

[[[1, 1], [3, 2], [9, 99]],
[[2, 1], [0, -1]],
[[7, 11]]]

我想使用NumPy模块(np.arraynp.append等)来做到这一点。

谁能帮我吗?

最佳答案

假设 baseinp 作为 NumPy 数组,我们可以这样做 -

# Get sorted indices for base
sidx = base.argsort()

# Get where the sorted version of base changes groups
split_idx = np.flatnonzero(np.diff(base[sidx])>0)+1
# OR np.unique(base[sidx],return_index=True)[1][1:]

# Finally sort inp based on the sorted indices and split based on split_idx
out = np.split(inp[sidx], split_idx)
<小时/>

为了使其适用于列表,我们需要进行一些调整,主要是索引部分,为此我们可以使用 np.take 来替换前面方法中列出的数组索引。因此,修改后的版本将是 -

sidx = np.argsort(base)
split_idx = np.flatnonzero(np.diff(np.take(base,sidx))>0)+1
out = np.split(np.take(inp,sidx,axis=0), split_idx)

关于python - 基于另一个列表对列表元素进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39387435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com