こんにちは私はPythonには新しいですが、私はmergesortを使ってカウントの反転問題に問題があります。エラーは、 "" int "オブジェクトはiterableではないと言いました。しかし、私はこの段階で何回も反復しているとは思っていません。私はここにくっついているので、このコードにもっと多くのバグがあるかどうかはわかりません。私はここで何が起こっているかを考え出す助けどうもありがとうございましPythonで逆転をカウントする:intオブジェクトnot iterable error
import sys
def merge_and_count_inversions(x, y):
sorted_array = []
count = 0
i, j = 0, 0
#print ("inside merge", x, y)
while i < len(x) and j < len(y):
if x[i] > y[j]:
count += len(x) - i
sorted_array.append(y[j])
j += 1
else:
sorted_array.append(x[i])
i += 1
while i < len(x):
sorted_array.append(x[i])
i += 1
while j < len(y):
sorted_array.append(y[j])
j += 1
#print ("overall count = ", count)
#print ("sorted_array", sorted_array)
return count, sorted_array
def get_number_of_inversions(a, b, left, right):
number_of_inversions = 0
if right - left <= 1:
return number_of_inversions
ave = (left + right) // 2
number_of_inversions_A, a[left:ave] = get_number_of_inversions(a, b, left, ave)
#print ("left list", a[left : ave])
#print ("number_of_inversions left half = ", number_of_inversions)
number_of_inversions_B, a[ave:right] = get_number_of_inversions(a, b, ave, right)
#print ("right list", a[ave : right])
#print ("number_of_inversions left + right half = ", number_of_inversions)
number_of_inversions_C, sorted_list = merge_and_count_inversions(a[left:ave],a[ave:right])
tot_inversions = number_of_inversions_A + number_of_inversions_B + number_of_inversions_C
#print ("number_of_inversions overall = ", number_of_inversions)
return tot_inversions, sorted_list
input_ = input()
n, *a = list(map(int, input_.split())) #n is the length of a
b = n * [0]
get_number_of_inversions(a, b, 0, len(a))
print(get_number_of_inversions(a, b, 0, len(a)))
、エラーが言った:?。
<ipython-input-60-e1f94361f38a> in get_number_of_inversions(a, b, left, right)
33 ave = (left + right) // 2
34 print ("average = ", ave)
---> 35 number_of_inversions_A, a[left:ave] = get_number_of_inversions(a, b, left, ave)
36 print ("left list", a[left : ave])
37 print ("number_of_inversions left half = ", number_of_inversions)
<ipython-input-60-e1f94361f38a> in get_number_of_inversions(a, b, left, right)
33 ave = (left + right) // 2
34 print ("average = ", ave)
---> 35 number_of_inversions_A, a[left:ave] = get_number_of_inversions(a, b, left, ave)
36 print ("left list", a[left : ave])
37 print ("number_of_inversions left half = ", number_of_inversions)
TypeError: 'int' object is not iterable
*ここでは、python3でリストを2つの部分に分割するために使用されています。たとえば、data = [1,2,3,4,5]の場合、n、* a = 1、[2,3,4,5]となります。 –
問題は、関数 'get_number_of_inversions()':return number_of_inversions'のreturn文にある可能性があります。私はそれが 'return number_of_inversions、[]'かもしれないと思います。 – acw1668
ええ、私はそれが私の問題だと思う、今私はそれを解決しました、ありがとう! –