如果我有子列表A:['E','C','W'],根据主列表M的顺序命令子列表的最pythonic方式是什么:['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)
答案 0 :(得分: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']
这是如何工作的:对于element
中的每个possibilities
,都会调用order.index(element)
,并且列表只是按相应位置排序。
答案 1 :(得分:2)
possibilities.sort(key=lambda x : ORDER.index(x))
答案 2 :(得分:2)
这是一个线性时间解决方案:
posset = set(possibilities)
[letter for letter in order if letter in posset]
仅过滤子列表成员的主列表。它是O(n),因为它只遍历主列表一次,如果子列表的大小接近主列表,它将表现良好。
这也假定possibilities
没有重复。但是,如果需要,您可以处理它,尽管它会使代码更复杂。