如何在Python中按升序对嵌套列表中的项目进行排序?

我在嵌套列表中有一个数字列表。我需要将它们按升序排序,同时将其保留在嵌套列表中。我想将它们重新分组到新的嵌套列表中。

我有以下功能:

def sorting(n): 
    for i in n:
        for e in range(1, len(i)):
            key = i[1]
            j = e - 1
            while j >= 0 and key < i[j]:
                i[j + 1] = i[j]
                j -= 1
            i[j + 1] = key

    for i in range(len(n)):
        return(n)

n = [[6, 2], [9, 5], [3, 7], [1, 8]]
print(sorting(n))

但是它不能正确排序列表。我得到这个:

[[2, 6], [5, 9], [3, 7], [1, 8]]

但是它应该通过以下方式重新组合嵌套列表:

[[1, 2], [3, 5], [6, 7], [8, 9]]

我如何编辑我的代码以使它起作用?

感谢您的帮助

评论
史安莲
史安莲

实际上,您应该首先将列表弄平,然后排序,然后重新配对:

n = [[6, 2], [9, 5], [2, 7], [1, 8]]
flatlist = [ x for pair in n for x in pair ]
flatlist.sort()
result = [ list(t) for t in zip (flatlist[0::2], flatlist[1::2]) ]
点赞
评论
十梦九你
十梦九你

解决此问题的一种方法是将列表弄平,对其进行排序,然后重新组合为成对的列表:

n = [[6, 2], [9, 5], [3, 7], [1, 8]]
# flatten list and sort
f = sorted(i for l in n for i in l)
# put it back together into nested pairs
n = [[v1, v2] for v1, v2 in zip(f[0::2], f[1::2])]
print(n)

输出:

[[1, 2], [3, 5], [6, 7], [8, 9]]
点赞
评论