首页 > 解决方案 > 寻找一种在python中将2个列表重新链接在一起的方法

问题描述

我基本上有 1 个列表:列表 [(name 1, score 1), (name 2, score 2) etc]。我使用另一个列表中的分数来根据算法随机化那些分数,但之后我想将每个分数链接回每个名称。分数可以相同,但没关系。如果 2 个分数相同但名称不同,则哪个分数与哪个名称相关联并不重要,因为分数是相同的。请帮忙!

输入:list1 = [(0, a), (100, b), (200, c), (300, d)] list2 = [[200, 0], [300, 100]]

预期输出:list3 = [[(200, c), (0, a)], [(300, d), (100, b)]]

如何从 list2 和 list1 中获取 list3?

*list1 = [(0, a), (0, b), (0, c), (0, d)] 也是一个有效的列表。

那么 list3 = [[(0, a), (0, b)], [(0, c), (0, d)]] 或 list3 = [[(0, d), ( 0, b)], [(0, c), (0, a)]]*

标签: pythonlist

解决方案


您可以使用自定义键功能进行排序list1,尽管这可能很慢:

def sort_by_order_in_other_list(other_list):
    def _inner(tup):
        return other_list.index(tup[0])
    return _inner

list3 = sorted(list1, key=sort_by_order_in_other_list(list2))

这可能是非常小的列表的最佳算法。对于更长的列表,我建议您先通过以list2更容易参考:

dict2 = {i: value for i, value in enumerate(list2)}

list3 = sorted(list1, key=lambda x: dict2[x[0]])

推荐阅读