Python 合并嵌套列表并查找顺序

Python 合并嵌套列表并查找顺序,python,python-2.7,sorting,numpy,Python,Python 2.7,Sorting,Numpy,我有一个嵌套列表,如下所示: [ [ [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.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)]

您可以递归地分析嵌套到任何深度的列表,方法如下:

def nested_list_walker(nested_lists, prefix=()):
    """Yields item, nested_index pairs."""
    try:
        for index, nested_list in enumerate(nested_lists):
            for output in nested_list_walker(nested_list,
                                             prefix=prefix + (index,)):
                yield output
    except TypeError:
        yield nested_lists, prefix
在您的示例中,对该生成器进行排序会产生:

[(0.08, (0, 0, 0)),
 (0.2, (0, 1, 0)),
 (0.23, (0, 2, 0)),
 (0.34, (0, 0, 1)),
 (0.5, (0, 1, 1)),
 (0.52, (0, 2, 1)),
 (0.6, (1, 0, 0)),
 (0.68, (0, 0, 2)),
 (0.7, (1, 3, 1)),
 (0.79, (1, 3, 2)),
 (0.88, (0, 2, 2)),
 (0.89, (1, 3, 3)),
 (0.91, (0, 2, 3)),
 (0.92, (0, 1, 2)),
 (0.96, (0, 1, 3)),
 (inf, (0, 3, 0)),
 (inf, (1, 1, 0)),
 (inf, (1, 2, 0))]

解释
0.05
如何属于
[1,3]
。。。你是说它在索引
[1][3]
?是的,这是正确的。