我必须列出如下所示:
list1 = [ ["name1", 100], ["name2", 33], ["name3", 22]]
list2 = [ ["name2", 1], ["name1", -1], ["name3", 0]]
列表包含0
和20
个名称
两个列表中的名称完全相同,但整数值不同。
是否可以对list2进行排序,以便名称的顺序与list1中的相同?
名称的顺序各不相同,因此它必须是一个灵活的解决方案,可以对名称进行排序,无论它们放在list2
的哪个位置。
我希望输出看起来像这样:
list1 = [ ["name1", 100], ["name2", 33], ["name3", 22]]
list2 = [ ["name1", -1], ["name2", 1], ["name3", 0]]
答案 0 :(得分:3)
在O(n)
时间内运行的稍微更优化的解决方案 - 它会从list2中创建一个dict,以便可以避免.index
,从而将O(n)
的复杂性提高到O(n**2)
{1}}:
In [68]: list1 = [ ["name1", 100], ["name2", 33], ["name3", 22]]
...: list2 = [ ["name2", 1], ["name1", -1], ["name3", 0]]
...:
In [69]: d_list2 = dict(list2)
In [70]: list2 = [[name, d_list2[name]] for (name, _) in list1]
In [71]: list2
Out[71]: [['name1', -1], ['name2', 1], ['name3', 0]]
答案 1 :(得分:2)
创建一个新列表,其顺序与list2
只包含名称的顺序相同。然后,您可以根据list1
列表中每个列表中第一个元素(名称)的索引对names
进行排序:
names = [l[0] for l in list1]
list2.sort(key=lambda l: names.index(l[0]))
#[['name1', -1], ['name2', 1], ['name3', 0]]