所以问题是我有一个引用列表,它是列的名称。然后,用户列表中的项目可能会具有不同的顺序,因此我想根据我的参考列表来重组其列表。让我们看一个例子:
我们有参考清单。
ref = ['meats', 'veggies', 'beers', 'soda']
所有清单都应遵循此顺序,首先是肉,然后是蔬菜,然后是啤酒,然后是苏打水。 因此,有效列表可能是
valid_1 = ['beef', 'carrot', 'pilsner', 'cola']
现在,用户具有错误顺序的商品列表,但我知道他们的订单。例如
invalid_1 = ['cucumber', 'stout', 'lamb', 'pepsi']
给出了他们的物品顺序,所以我知道它的['veggies', 'beer', 'meat', 'soda']
。
所以问题是,根据参考列表将其列表变形为我想要的顺序的最快方法是什么?
感谢帮助人员
答案 0 :(得分:2)
考虑到该问题,您可以按照我接受的评论进行操作:
def arbitrary_sort( values, values_kind, ref_kind ):
indexed_ref = { k: i for i, k in enumerate(ref_kind) }
indexed_dic = { indexed_ref[k]: v for v, k in zip(values, values_kind) }
return [ indexed_dic[i] for i in sorted( indexed_dic ) ]
时间复杂度为O(NlogN),因为前两个操作是线性的,因此我们调用了sorted
函数。