2011-10-30 8 views
0

순서가 잘못된 쌍의 수를 반환하는 함수를 만들려고합니다.순서가 잘못된 항목 쌍을 찾습니다.

예를 들어,이 함수는 'DCBA' 인수로 6을 반환합니다.

내 코드는 지금까지 있습니다 :

def calc_out_of_order_pairs(s): 
    res = [] 
    sum = 0 
    for i in s: 
     for j in s: 
      res.append(i+j) 

    for test in res: 
     if pair[0] > pair[1]: 
      sum +=1 

    return sum 
+0

추천 도서 : http://docs.python.org/howto/functional.html – tokland

답변

3
>>> from itertools import combinations 
>>> sum(x>y for x,y in combinations("DCBA",2)) 
6 

힌트 : 사용 조합이 한 쌍의 첫 번째

>>> list(combinations("DCBA", 2)) 
[('D', 'C'), ('D', 'B'), ('D', 'A'), ('C', 'B'), ('C', 'A'), ('B', 'A')] 

보다 먼저 문자열에 발생하는 각 쌍을 반환처럼 초보자가 쉽게 따라 할 수있는 다른 방법이 있습니다.

>>> s = "DCBA" 
>>> count = 0 
>>> for i in range(len(s)-1): 
... for j in range(i+1, len(s)): 
...  if s[i]>s[j]: 
...  count += 1 
... 
>>> count 
6 
+0

우수 답변입니다. 'itertools.combinations()'는 Python 2.6부터 사용할 수 있습니다. –

+0

이 문제를 해결하는 간단한 방법이 있습니까? 방금 파이썬을 배우기 시작했습니다. – user1021090

+0

@ user1021090 : 수학 개념을 다루는 것이므로 조합, 목록 내재 또는 합계와 같은 것들을 사용하는 것이 좋습니다. 튜토리얼을 공부하여 언어에 익숙해 지도록하십시오. 그러나, ("DCBA", 2)의 조합에서 (x, y)에 대해 파이썬의 암시 적 변환 True-> 1, False-> 0을 사용하지 않는 것이 좋습니다.)' – tokland

관련 문제