在一个列表中对两个列表中的项目进行排序,同时保持原始列表中的顺序
我有两个未排序的列表如下:
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]