Python 基于模式的排序列表

Python 基于模式的排序列表,python,list,Python,List,我想知道如何根据其他两个列表的值/顺序轻松生成列表: list_a = ['web1','web2','web3','web1','web4'] list_b = ['web2','web4','web1','web5','web1'] 我想从“列表a”中检索按值排序的“列表b”列表: 如果列表_b上存在条目,但列表_a上不存在条目,则该值将附加到列表末尾 我不确定从哪里开始,我最初的想法是使用enum[I for I,x in enumerate(mylist)if x==value]检索所

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

list_a = ['web1','web2','web3','web1','web4']
list_b = ['web2','web4','web1','web5','web1']
我想从“列表a”中检索按值排序的“列表b”列表:

如果列表_b上存在条目,但列表_a上不存在条目,则该值将附加到列表末尾


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

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

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)
输出

['web1', 'web2', 'web1', 'web4', 'web5']

另一个更棘手的方法是使用和一些列表理解,利用计数器的集合交叉点和差异

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]

“我想从“列表a”中检索按值排序的“列表b”:”-你能提供更多信息吗?我不了解你的排序机制-如何确定哪个值在哪里?只需在列表a上迭代,询问列表b中列表a中的元素是否在列表b中,继续将其添加到第三个最终列表,同时从列表_b中删除匹配项。然后将列表_b的剩余内容附加到final末尾?通过对列表进行排序,您将获得什么好处?
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]