首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于模式的列表排序

基于模式的列表排序
EN

Stack Overflow用户
提问于 2016-06-13 23:50:26
回答 1查看 520关注 0票数 1

我想知道如何根据其他两个列表的值/顺序轻松生成列表:

代码语言:javascript
复制
list_a = ['web1','web2','web3','web1','web4']
list_b = ['web2','web4','web1','web5','web1']

我想从“list_a”中检索按值排序的"list_b“列表:

代码语言:javascript
复制
final = ['web1','web2','web1','web4','web5']

如果条目存在于list_b上,但不存在于list_a上,则将该值附加到列表的末尾。

我不知道从哪里开始,我最初的想法是使用枚举[i for i, x in enumerate(mylist) if x==value]检索所有索引,然后对列表进行排序,但是我很难管理具有多重索引的条目(例如: web1)。只是想知道你们是否在想一种简单的方法来实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2016-06-14 00:01:08

一种非常简单的方法是遍历list_a,如果您在list_b中找到每个元素,则将其删除并将其附加到列表中。然后,在迭代之后,list_b中剩下的所有元素都是需要添加到列表末尾的元素。

代码语言:javascript
复制
list_a = ['web1','web2','web3','web1','web4']
list_b = ['web2','web4','web1','web5','web1']

front = []
for ele in list_a:
    if ele in list_b:
        front.append(ele)
        list_b.remove(ele)

final = front + list_b
print(final)

输出

代码语言:javascript
复制
['web1', 'web2', 'web1', 'web4', 'web5']

另一种更棘手的方法是使用collections.Counter和一些列表理解,利用计数器的集合交集和差异。

代码语言:javascript
复制
from collections import Counter

cnt_a, cnt_b = Counter(list_a), Counter(list_b)
intersct = (cnt_a & cnt_b)
diff = (cnt_b - cnt_a)

final = [a for a in list_a if a in intersct] + [b for b in list_b if b in diff]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37794129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档