我想排序列表的列表,即:如何通過使第一行與另一個列表匹配來對列表進行排序?
[['Y', 'K', 'E'],
[3, 1, 2],
[6, 4, 5]]
該名單的第一行應與其他提供的列表(這個列表總是包含匹配字母的第一個列表的第一行):
['K', 'E', 'Y']
,使最終輸出爲:
[['K', 'E', 'Y'],
[1, 2, 3],
[4, 5, 6]]
我想排序列表的列表,即:如何通過使第一行與另一個列表匹配來對列表進行排序?
[['Y', 'K', 'E'],
[3, 1, 2],
[6, 4, 5]]
該名單的第一行應與其他提供的列表(這個列表總是包含匹配字母的第一個列表的第一行):
['K', 'E', 'Y']
,使最終輸出爲:
[['K', 'E', 'Y'],
[1, 2, 3],
[4, 5, 6]]
簡單的方法是用zip()
移調它,它的排序與T的關鍵使用列表解析
>>> data = [['Y', 'K', 'E'],
... [3, 1, 2],
... [6, 4, 5]]
>>> key = 'KEY'
>>> sorted(zip(*data), key=lambda x: key.index(x[0]))
[('K', 1, 4), ('E', 2, 5), ('Y', 3, 6)]
>>> list(zip(*sorted(zip(*data), key=lambda x: key.index(x[0]))))
[('K', 'E', 'Y'), (1, 2, 3), (4, 5, 6)]
luv這個伴侶,優雅的方式,感謝分享:) – Netwave
好的解決方案。我打算做類似的事情。 +1 – erip
我發現這不工作時,我用數據[1/2]列表中的字符,而不是整數,無論如何周圍呢? – hysteriaistic
一個非常簡單的方法:他第一個元素的鍵列表中的索引,然後轉回來
>>> L = [['Y', 'K', 'E'], [3, 1, 2], [6, 4, 5]]
>>> indexes = [L[0].index(x) for x in "KEY"]
>>> [[row[i] for i in indexes] for row in L]
[['K', 'E', 'Y'], [1, 2, 3], [4, 5, 6]]
優雅的解決方案,+1 –
快速,清晰。相當不錯。 – TigerhawkT3
你嘗試什麼嗎? –
我很困惑。你想如何排序?基於第二行?基於第三行? – erip
@erip他想按照提供的順序排序 –