2014-10-15 3 views
-4

Я в основном пытаюсь закодировать алгоритм подсчета инверсий (с делением & победить стратегию сортировки слияния). Я первый попытался проверить его в небольшом массиве, но я получаю следующее сообщение об ошибке:Python дает ошибку «int is iterable», хотя код выглядит чистым

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 

Вот мой код:

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)) 

Я не мог найти ошибку с помощью сообщения об ошибке , Поэтому я был бы признателен, если вы поможете мне указать на мою ошибку.

Заранее спасибо. :)

+0

Вот и все. Обнаружена ошибка! :) Благодаря. Не могу поверить, что я этого не видел. : 3 –

ответ

1

Если n <= 0, count_inversions() возвращает 0 вместо кортежа:

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

Поскольку функция вызова ожидает кортеж, это приводит к ошибке.

Смежные вопросы