2014-10-15 3 views
-4

기본적으로 병합 정렬의 & 분할을 사용하여 역전을 계산하는 알고리즘을 코딩하려고합니다. 내가 먼저 작은 배열에서 테스트하려고했으나 나는 다음과 같은 오류 얻을 :Python은 코드가 깨끗해 보이더라도 "int is iterable not"오류를 표시합니다.

def count_split_inversions(a, b): 
    c, cnt = [], 0 
    while len(a) > 0 and len(b) > 0: 
     if b[0] < a[0]: 
      c.append(b.pop(0)) 
      cnt += len(a) 
     else: 
      c.append(a.pop(0)) 
    if len(a) > 0: 
     c.extend(a) 
    else: 
     c.extend(b) 
    return(c, cnt) 

def count_inversions(array): 
    n = len(array) 

    if n <= 1: return(0) 

    mid = n // 2 
    a, left = count_inversions(array[:mid]) 
    b, right = count_inversions(array[mid:]) 
    c, split = count_split_inversions(a, b) 

    return(c, left + right + split) 

array = [1, 3, 5, 2, 4, 6] 
ans = count_inversions(array)[1] 
print("The answer is:", str(ans)) 

나는 오류 메시지의 도움으로 실수를 찾을 수 없습니다 : 여기

Traceback (most recent call last): 
    File "cntinv.py", line 26, in <module> 
    ans = count_inversions(array)[1] 
    File "cntinv.py", line 19, in count_inversions 
    a, left = count_inversions(array[:mid]) 
    File "cntinv.py", line 19, in count_inversions 
    a, left = count_inversions(array[:mid]) 
TypeError: 'int' object is not iterable 

내 코드의를 . 내 실수를 지적하도록 도와 주시면 감사하겠습니다.

미리 감사드립니다. :)

+0

그게 전부입니다. 오류를 발견했습니다! :) 감사. 나는 그것을 보지 못했다고 나는 믿을 수 없다. :삼 –

답변

1

count_inversions() 반환하는 대신 튜플의 0, n <= 0 경우

def count_inversions(array): 
    ... 
    if n <= 1: return(0) 
    ... 

호출하는 함수는 튜플을 기대하고 있기 때문에,이 오류가 발생합니다.

관련 문제