繁体   English   中英

更改列表中元素的 position 以便它们交叉匹配 Python 中的另一个列表

[英]Change position of elements in a list so they cross match another list in 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 具有相同的 position。

所需的子列表:

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]

Output:

['email1@email.com', 'email2@email.com', 'email3@email.com', 'email4@email.com']
['email4@email.com', 'email3@email.com', 'email2@email.com', 'email1@email.com']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM