2个清单列表.根据列表的列表对两者进行排序

Ena*_*yat 0 python sorting

我有两个清单:

X=[[1,2,3],[5,5],[1]]
Y=[[2,4],[1,4,6,6],[1,3]]
Run Code Online (Sandbox Code Playgroud)

列表X和Y的元素之间存在一对一的对应关系.我想按项目的长度对X的元素进行排序,同时Y的项目按照新的索引排序在正确的位置. X的项目.

结果应该是:

X=[[1],[5,5],[1,2,3]]
Y=[[1,3],[1,4,6,6],[2,4]]
Run Code Online (Sandbox Code Playgroud)

Ben*_*son 6

列表X和Y的元素之间存在一对一的对应关系

这表明zip在您对它们做任何其他事情之前,您应该将列表放在一起.

>>> zippedLists = zip(X, Y)
Run Code Online (Sandbox Code Playgroud)

zippedLists将是包含来自X和的相应元素的元组列表Y:

>>> list(zippedLists)
[([1, 2, 3], [2, 4]), ([5, 5], [1, 4, 6, 6]), ([1], [1, 3])]
Run Code Online (Sandbox Code Playgroud)

现在,您可以根据第一个元素的长度重新排列元组,使用以下key参数sorted:

>>> sortedZippedLists = sorted(zippedLists, key=lambda x: len(x[0]))
>>> list(sortedZippedLists)
[([1], [1, 3]), ([5, 5], [1, 4, 6, 6]), ([1, 2, 3], [2, 4])]
Run Code Online (Sandbox Code Playgroud)

然后解压缩列表,如果需要的话.

>>> sortedX, sortedY = zip(*sortedZippedLists)
>>> list(sortedX)
[[1], [5, 5], [1, 2, 3]]
>>> list(sortedY)
[[1, 3], [1, 4, 6, 6], [2, 4]]
Run Code Online (Sandbox Code Playgroud)

或者,作为单个表达式:

zip(*sorted(zip(X,Y), key=lambda x: len(x[0])))
Run Code Online (Sandbox Code Playgroud)

  • 真的,有时候我不明白这里有什么事情,OP没有提供他已经在他的问题中提出的任何尝试,我们让他发布尝试,所以我们可以根据我遇到的着名表达来帮助他很多次:"所以......不是代码编写服务"......我已经有了相同的解决方案,已经准备好发布......但我想我应该等待OP编辑他的Q ...现在我看到了人们在这里赞成..有点令人困惑..:P ..如果我知道它会得到投票,我会发布.. :( (4认同)