[英]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
每個element
, order.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.