在python中,按父列表顺序对父列表的子列表排序
我正在尝试使用Python按父列表顺序对父列表的子列表进行排序在python中,按父列表顺序对父列表的子列表排序,python,python-3.x,Python,Python 3.x,我正在尝试使用Python按父列表顺序对父列表的子列表进行排序 parent_list = ['a', 'b', 'c', 'd', 'e', 'f'] child_list = ['e', 'd', 'b'] 预期产出: child_list = ['b', 'd', 'e'] 我试过如下: child_list.sort(key = lambda i: parent_list.index(i)) 错误: ValueError: 'a' is not in list 虽然您发布的代码有
parent_list = ['a', 'b', 'c', 'd', 'e', 'f']
child_list = ['e', 'd', 'b']
预期产出:
child_list = ['b', 'd', 'e']
我试过如下:
child_list.sort(key = lambda i: parent_list.index(i))
错误:
ValueError: 'a' is not in list
虽然您发布的代码有效(如果它给您一个错误,那么您必须使用不同的代码或不同的数据),但效率低下:需要从头到尾(可能)搜索子列表中的每个元素的父列表。这么短的列表并不重要,但当这些列表的长度达到数千时,你可能会开始注意到 一种更有效的方法是首先从父列表中创建一个字典,将元素映射到索引,然后使用该字典进行排序
>索引={i:e代表e,i在枚举(父列表)中]
>>>指数
{'a':0,'b':1,'c':2,'d':3,'e':4,'f':5}
>>>child_list.sort(key=lambda e:index[e])
应该可以,在本例中确实可以。您是否运行了导致此错误的其他代码?您想做什么?将子列表的成员按其在父列表中的相同顺序放置?请尝试:child\u list.sort(key=lambda i:parent\u list.index(i[0])
仅当元素出现在parent\u list
中时才起作用。请注意,在编写key=lambda thing:something(thing)
的情况下,您通常只需编写key=something
。谢谢。正如你所说,由于代码的另一部分,我得到了错误。很抱歉给您添麻烦。如果我有两个这样的列表``parent_list=['a','b','c','d','e','f']和child_list=['e','d','b','k','j']```,我如何删除(键不在父列表中)'k'和'j'
已排序子列表中的元素?子列表=已排序(过滤器(索引中的lambda e:e,子列表),key=lambda e:index[e])
或子列表=已排序(如果索引中有e,则子列表中的e表示e),键=…)