簡體   English   中英

按另一個字符串列表排序字符串列表 python

[英]sort string list by another string list python

所以我有 2 個列表。

list1 是我試圖重新創建的訂單的列表。

list2 是無序列表。

如何以與 list1 相同的順序排列 list2?

清單 1

list1 = [
            "loaded_sound,sfx/weapon/smg/type100/fire",
            "loaded_sound,sfx/weapon/smg/type100/foley",
            "loaded_sound,sfx/weapon/special/bouncing_betty",
            "loaded_sound,sfx/weapon/special/flame_thrower/foley",
            "loaded_sound,sfx/weapon/special/molotov",
            "loaded_sound,sfx/weapon/special/ptrs/fire",
            "loaded_sound,sfx/weapon/special/satchel_charge",
            "loaded_sound,sfx/weapon/tank/kingtiger/fire",
            "loaded_sound,sfx/weapon/tank/ringoffs",
            "loaded_sound,sfx/weapon/tank/sherman/fire",
            "loaded_sound,sfx/weapon/tank/tank_reload/foley",
            "loaded_sound,sfx/weapon/tank/tank_reload",
            "loaded_sound,sfx/weapon/tesla/bounce",
            "loaded_sound,sfx/weapon/tesla",
            "loaded_sound,sfx/weapon/uber",
            "loaded_sound,stream/music/mission/zombie",
            "loaded_sound,voiceovers/zombie/ann",
            "loaded_sound,voiceovers/zombie/monkey/explo_vox",
            "loaded_sound,voiceovers/zombie/monkey/groan",
            "loaded_sound,voiceovers/zombie/monkey",
            "loaded_sound,voiceovers/zombie/monkey/raise_vox",
            "loaded_sound,voiceovers/zombie/pa"
        ]

清單 2:

list2 = [
            "loaded_sound,sfx/weapon/smg/type100/fire",
            "loaded_sound,voiceovers/zombie/pa",
            "loaded_sound,sfx/weapon/smg/type100/foley",
            "loaded_sound,voiceovers/zombie/monkey/raise_vox",
            "loaded_sound,sfx/weapon/special/bouncing_betty",
            "loaded_sound,sfx/weapon/special/flame_thrower/foley",
            "loaded_sound,voiceovers/zombie/monkey",
            "loaded_sound,voiceovers/zombie/monkey/groan",
            "loaded_sound,sfx/weapon/special/molotov",
            "loaded_sound,voiceovers/zombie/monkey/explo_vox",
            "loaded_sound,sfx/weapon/special/ptrs/fire",
            "loaded_sound,voiceovers/zombie/ann",
            "loaded_sound,sfx/weapon/special/satchel_charge",
            "loaded_sound,stream/music/mission/zombie",
            "loaded_sound,sfx/weapon/tank/kingtiger/fire",
            "loaded_sound,sfx/weapon/uber",
            "loaded_sound,sfx/weapon/tank/ringoffs",
            "loaded_sound,sfx/weapon/tesla",
            "loaded_sound,sfx/weapon/tank/sherman/fire",
            "loaded_sound,sfx/weapon/tesla/bounce",
            "loaded_sound,sfx/weapon/tank/tank_reload/foley",
            "loaded_sound,sfx/weapon/tank/tank_reload",
        ]

我試過什么:

_newList = []
# sort list2 in same order as list 1
for i in list1:
    _line_ = i
    for j in list2:
        if j == _line_:
            _newList.append(j)

但這所做的只是照原樣重新創建 list2。 它沒有重新安排任何東西。

排序list2時,您可以使用list1中的索引作為鍵。

如果列表很長,最好創建一個返回索引的字典,而不是搜索每個。

list1_dict = {val: i for i, val in enumerate(list1)}
list2.sort(key = lambda x: list1_dict.get(x, -1))

如果list2中有任何不在list1中的元素,這會將它們排序到開頭。

我建議您使用以下單行樣式代碼:

list2 = [i for i in list1 if i in list2]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM