1

サブリスト A: ['E','C', 'W'] がある場合、マスター リスト M: ['C','B','W] の順序に従ってサブリストを並べ替える最も Pythonic な方法は何ですか? ','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)
4

3 に答える 3

8
>>> order = ['C','B','W','E','K']
>>> possibilities = ['E','C','W']
>>> possibilities_in_order = sorted(possibilities, key=order.index)
>>> possibilities_in_order
['C', 'W', 'E']

これがどのように機能するか: for each elementinが呼び出されpossibilitiesorder.index(element)リストはそれぞれの位置で単純にソートされます。

詳細:組み込み関数 →sorted .

于 2012-11-12T21:25:12.620 に答える
2

線形時間のソリューションは次のとおりです。

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

これにより、サブリストのメンバーのみのマスター リストがフィルター処理されます。マスター リストを 1 回だけトラバースするため O(n) であり、サブリストのサイズがマスター リストに近い場合に適切に機能します。

possibilitiesこれも重複がないことを前提としています。ただし、コードがより複雑になりますが、必要に応じてそれを処理できます。

于 2012-11-12T21:30:02.777 に答える
2
possibilities.sort(key=lambda x : ORDER.index(x))
于 2012-11-12T21:25:17.703 に答える