我想排序列表的列表,即:如何通过使第一行与另一个列表匹配来对列表进行排序?
[['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他想按照提供的顺序排序 –