給定兩個串列,每個串列都包含串列,我想根據以下通用規則對這兩個串列進行排序。
在第一個串列中,如果串列的長度不相同,則先按長度排序。然后,如果兩個或多個元素的長度相同,則根據通常的排序規則(字典順序)對它們進行排序。
最后,假設這兩個串列一一對應,使用與第一個串列固有的相同排列對第二個串列進行排序。
例如,考慮A = [[4,8],[8,9],[5]]和B = [[2,4],[1,3],[1,2]]。
排序后的第一個串列是[[5],[4,8],[8,9]]. 因此,第二個應該是[[1,2],[2,4],[1,3]].
我查看了之前提出的類似問題,大多數情況下的解決方案是使用 zip 功能。但這在這里不起作用,因為我必須一個接一個地使用兩種不同的排序規則。
uj5u.com熱心網友回復:
嘗試:
A = [[4, 8], [8, 9], [5]]
B = [[2, 4], [1, 3], [1, 2]]
idxs, A = zip(*sorted(enumerate(A), key=lambda k: (len(k[1]), k[1])))
B = [B[i] for i in idxs]
print(list(A))
print(B)
印刷:
[[5], [4, 8], [8, 9]]
[[1, 2], [2, 4], [1, 3]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/482213.html
上一篇:Powershell對txt檔案中的IP地址進行排序
下一篇:Pandas列串列中的單詞排序
