我有两个清单:
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)
列表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)