基于模板列表排序Python列表:将不存在元素置于末尾的实现方法
解决按模板列表排序并追加剩余元素的问题
嘿,很高兴你喜欢Python!这个按模板排序的需求其实挺实用的,咱们轻松搞定它~
首先,咱们明确下需求:要让list_a里的元素优先按照list_b的顺序排列,那些不在list_b里的元素就放到列表最后,对吧?而且你提到的“其余未排序元素”,我默认保持它们在原list_a里的出现顺序,如果需要额外排序的话,我后面也会提修改方法。
直接上代码,你可以直接运行试试:
list_a = ['XL', 'L', '0S', '1L', '1S', '2S', 'M', '58', '52', 'XXL'] list_b = ['S', 'M', 'L', 'XL', '0S', '1S', '2S', '3S'] # 第一步:提取list_a中在list_b里的元素,严格遵循list_b的顺序 sorted_matched = [item for item in list_b if item in list_a] # 第二步:提取list_a中不在list_b里的元素,保留原顺序 remaining_elements = [item for item in list_a if item not in list_b] # 第三步:合并两部分得到最终结果 final_sorted_list = sorted_matched + remaining_elements print(final_sorted_list)
运行这段代码后,你会得到这样的结果:
['M', 'L', 'XL', '0S', '1S', '2S', '1L', '58', '52', 'XXL']
完全符合你的预期:前面是按list_b顺序排列的匹配元素,后面跟着原列表里剩下的元素。
小优化与扩展
如果你的list_a元素很多,用列表的in判断会有点慢,咱们可以用集合来提速(集合的成员判断是O(1),比列表的O(n)快很多):
set_a = set(list_a) sorted_matched = [item for item in list_b if item in set_a]
要是你希望后面的剩余元素也按某种规则排序(比如字符串字典序),只需要把remaining_elements改成排序后的版本:
remaining_elements = sorted([item for item in list_a if item not in list_b])
这样剩余元素就会变成['1L', '52', '58', 'XXL']这种有序的样子啦。
内容的提问来源于stack exchange,提问作者Pixiandreas
相关产品推荐
相关产品推荐

