我想知道如何根据其他两个列表的值/顺序轻松生成列表:
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 )。只是想知道你们是否正在考虑一种简单的方法来实现这一目标?
答案 0 :(得分:1)
一种非常简单的方法是迭代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]