gpt4 book ai didi

python - 合并嵌套列表并查找顺序

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:22 25 4
gpt4 key购买 nike

我有一个这样的嵌套列表:

[
[
[0.08, 0.34,0.68],
[0.20, 0.5, 0.92, 0.96],
[0.23, 0.52, 0.88, 0.91],
[inf]
],
[
[0.60],
[inf],
[inf],
[0.05, 0.70, 0.79, 0.89]
]
]

下一级的尺寸是固定的,例如7x2。但最底层是可变的。

我想像这样创建一个排序的组合列表

[0.05,0.08,0.20,0.23,0.34,...]

但我还想要数字所属的列表,例如 0.05 属于 [1,3] 等等。

谁能帮我解决这个问题?我可以将其组合成一个排序列表。但是我找不到获取列表索引的有效方法。

最佳答案

是这样的吗?

from numpy import inf
lst = [[[0.08, 0.34,0.68],[0.20, 0.5, 0.92, 0.96], [0.23, 0.52, 0.88, 0.91], [inf]], [[0.60], [inf], [inf],[0.05, 0.70, 0.79, 0.89]]]

sorted((e, i, j) for i in range(len(lst)) for j in range(len(lst[0])) for e in lst[i][j])

# [(0.05, 1, 3),
# (0.08, 0, 0),
# (0.2, 0, 1),
# (0.23, 0, 2),
# (0.34, 0, 0),
# (0.5, 0, 1),
# ...

您可以使用 zip 从值中解压缩索引:

vals, *inds = zip(*sorted((e, i, j) for i in range(len(lst)) for j in range(len(lst[0])) for e in lst[i][j]))

vals
# (0.05, 0.08, 0.2, 0.23, 0.34, 0.5, 0.52, 0.6, 0.68, 0.7, 0.79, 0.88, 0.89, 0.91, 0.92, 0.96, inf, inf, inf)

inds
# [(1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1),
# (3, 0, 1, 2, 0, 1, 2, 0, 0, 3, 3, 2, 3, 2, 1, 1, 3, 1, 2)]

关于python - 合并嵌套列表并查找顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43419182/

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