在Python中改变一个列表中元素的位置,使它们与另一个列表交叉匹配。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中改变一个列表中元素的位置,使它们与另一个列表交叉匹配。相关的知识,希望对你有一定的参考价值。
我有两个邮件列表。
masterlist = ['email1@email.com', 'email2@email.com', 'email3@email.com', 'email4@email.com']
sublist = ['email3@email.com', 'email4@email.com', 'email2@email.com', 'email1@email.com']
主列表是固定的,但子列表的顺序应该改变,以便主列表的邮件与子列表的邮件匹配,反之亦然。
例如,主列表中的email1被分配给子列表中的email3,因此子列表中的email1也应该和主列表中的email3有相同的位置。
所希望的子列表。
sublist_ordered = ['email3@email.com', 'email4@email.com', 'email1@email.com', 'email2@email.com']
我想利用索引来获得一个索引列表,但我不知道如何进行索引。
order = [0, 1, 3, 2]
ordered_list = [sublist[i] for i in order]
答案
我想你可以通过排序来实现这个功能。
sublist_ordered = sorted(sublist, key=lambda x: masterlist.index(x))
另一答案
我想我找到了一个解决方案。
masterlist = ['email1@email.com', 'email2@email.com', 'email3@email.com', 'email4@email.com']
sublist = ['email3@email.com', 'email4@email.com', 'email2@email.com', 'email1@email.com']
order = []
for i in range(len(masterlist)):
mastermail = masterlist[i]
order.append(sublist.index(mastermail))
order.reverse()
sublist_ordered = [sublist[i] for i in order]
输出:
['email1@email.com', 'email2@email.com', 'email3@email.com', 'email4@email.com']
['email4@email.com', 'email3@email.com', 'email2@email.com', 'email1@email.com']
以上是关于在Python中改变一个列表中元素的位置,使它们与另一个列表交叉匹配。的主要内容,如果未能解决你的问题,请参考以下文章