gpt4 book ai didi

python - 根据模式对列表进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:32 26 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

一种极其简单的方法是迭代 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)

输出:

['web1', 'web2', 'web1', 'web4', 'web5']
<小时/>

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

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]

关于python - 根据模式对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37794129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com