根据Python中的另一个列表重新排序列表

时间:2019-07-10 12:34:10

标签: python

所以问题是我有一个引用列表,它是列的名称。然后,用户列表中的项目可能会具有不同的顺序,因此我想根据我的参考列表来重组其列表。让我们看一个例子:

我们有参考清单。

ref = ['meats', 'veggies', 'beers', 'soda']

所有清单都应遵循此顺序,首先是肉,然后是蔬菜,然后是啤酒,然后是苏打水。 因此,有效列表可能是

valid_1 = ['beef', 'carrot', 'pilsner', 'cola']

现在,用户具有错误顺序的商品列表,但我知道他们的订单。例如

invalid_1 = ['cucumber', 'stout', 'lamb', 'pepsi']

给出了他们的物品顺序,所以我知道它的['veggies', 'beer', 'meat', 'soda']

所以问题是,根据参考列表将其列表变形为我想要的顺序的最快方法是什么?

感谢帮助人员

1 个答案:

答案 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函数。