簡體   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