2012-11-12 5 views
1

하위 목록 A가있는 경우 : [ 'E', 'C', 'W'] 마스터의 순서에 따라 하위 목록을 정렬하는 가장 비유적인 방법은 무엇입니까? 목록 M : [ 'C', 'B', 'W', 'E', 'K']순서가 지정된 목록에서 하위 목록을 주문하는 가장 파이썬적인 방법

내 솔루션은 다소 초보적인 것처럼 보입니다. 같은 결과를 얻는 더 '파이썬적인'방법이 있다면 나는 궁금하다. possibilities의 각 element를 들어, order.index(element)를 호출하고 목록이 단순히 그 각각의 위치에 의해 정렬이 어떻게 작동

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) 

답변

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'] 

.

자세한 내용 : Built-in Functions → sorted.

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

이 하위 목록의 구성원에 대한 마스터 목록을 필터링 :

+1

너희들은 너무 빠르다. – arshajii

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

여기 선형 타임 솔루션입니다. O (n)은 마스터 목록을 한 번만 통과하기 때문에 하위 목록의 크기가 마스터 목록과 비슷하면 잘 수행됩니다.

여기에는 possibilities에도 중복이 없다고 가정합니다. 그러나 코드가 복잡 해지더라도 필요한 경우 처리 할 수 ​​있습니다.

+1

니스. '가능성'의 요소가 반복 될 수 있다면 이것은 효과가 없을 것입니다. 그러나 나는 그들이 할 수 없다고 생각한다. –

관련 문제