在一个列表中对两个列表中的项目进行排序,同时保持原始列表中的顺序

我有两个未排序的列表如下:

A = [1, 3, 1.75]
B = [0, 1.5, 2, 4]

我想制作一个列表,其中以排序方式(例如升序)包含 A 和 B 中的数字。但是,我也想保留每个列表中的序列。合适的输出如下所示:

AB = [0, 1, 1.5, 2, 3, 1.75, 4]

您对如何执行此操作有任何想法/提示吗?原始问题包括 150 个列表,这些列表需要像上面一样合并为一个列表。预先感谢您的想法!

回答

对我来说,这看起来像是一个“合并”问题:

def merge(lists):
    iters = [iter(s) for s in lists]
    heads = [next(s) for s in iters]
    res = []
    inf = float('inf')

    while True:
        v, n = min((v, n) for n, v in enumerate(heads))
        if v == inf:
            return res

        res.append(v)
        try:
            heads[n] = next(iters[n])
        except StopIteration:
            heads[n] = inf


lists = [
    [1,2,3,8],
    [1,7,4],
    [6,9,1,2,3],
]

print(merge(lists))
## [1, 1, 2, 3, 6, 7, 4, 8, 9, 1, 2, 3]


以上是在一个列表中对两个列表中的项目进行排序,同时保持原始列表中的顺序的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>