簡體   English   中英

從排序列表中排序子列表的大多數pythonic方法

[英]most pythonic way to order a sublist from a ordered list

如果我有子列表A:['E','C','W'],根據主列表M:['C','B','W ','E','K']

我的解決方案似乎很初級。 我很好奇是否還有一種更“ pythonic”的方式來獲得相同的結果。

ORDER = ['C','B','W','E','K']
possibilities = ['E','C', 'W']
possibilities_in_order = []

for x in ORDER:
    if x in possibilities: possibilities_in_order.append(x)
>>> order = ['C','B','W','E','K']
>>> possibilities = ['E','C','W']
>>> possibilities_in_order = sorted(possibilities, key=order.index)
>>> possibilities_in_order
['C', 'W', 'E']

它是如何工作的:對於possibilities每個elementorder.index(element)調用order.index(element) ,並且列表僅按這些位置進行排序。

更多詳細信息: 內置函數→已sorted

possibilities.sort(key=lambda x : ORDER.index(x))

這是線性時間解決方案:

posset = set(possibilities)
[letter for letter in order if letter in posset]

這僅過濾子列表的成員的主列表。 之所以為O(n),是因為它僅遍歷主列表一次,並且如果子列表的大小與主列表接近,則效果會很好。

這也假設possibilities沒有重復。 盡管可以使代碼更加復雜,但是您可以根據需要進行處理。

暫無
暫無

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

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