在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中改变一个列表中元素的位置,使它们与另一个列表交叉匹配。的主要内容,如果未能解决你的问题,请参考以下文章

python算法:二分查找

python中元组和列表有啥区别

列表中的最小交换元素使其与另一个列表相同并计算python中的交换

python中列表和元组之间有啥区别?

python列表

Python基础学习参考:列表和元组