基于模式的列表排序

2024-10-02 14:21:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

list_a = ['web1','web2','web3','web1','web4']
list_b = ['web2','web4','web1','web5','web1']

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

^{pr2}$

如果某个条目存在于列表“b”上,但不在列表“a”上,则该值将追加到列表末尾。在

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


Tags: in列表for排序顺序条目enumlist
1条回答
网友
1楼 · 发布于 2024-10-02 14:21:36

一种非常简单的方法是只迭代list_a,如果你在list_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)

输出

^{pr2}$

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

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]

相关问题 更多 >