2016-10-09 1 views
0

実際には、ループ内にループを含む関数をPythonで記述しようとしています。あなたのサンプル・データと、私の場合 - しかし、私はIndexError: list index out of rangePython:Crossループ内のループの接続

ここで機能

def merge(A,B): 
    c = [] 
    k = 0 
    i = 0 
    j = 0 
    while i < len(A): 
     while j < len(B): 
      if A[i] <= B[j]: 
       c.append(A[i]) 
       i+=1 
       print c 
       print i 
       print k 
       k=j 
      else: 
       c.append(B[j]) 
       j+=1 
     c.extend(A[i:]) 
     return c 
    c.extend(B[k:]) 
    return c 

はここであなたが途中でif文でIまたはJをインクリメントしているエラー

merge([1,8,9],[2,3,4,11]) 
[1] 
1 
0 
[1, 2, 3, 4, 8] 
2 
0 
[1, 2, 3, 4, 8, 9] 
3 
3 

Traceback (most recent call last): 
    File "<pyshell#51>", line 1, in <module> 
    merge([1,8,9],[2,3,4,11]) 
    File "<pyshell#49>", line 8, in merge 
    if A[i] <= B[j]: 
IndexError: list index out of range 

答えて

3

だだを取得しますすでにlen(A)-1、すなわち2であり、while j < len(B)が実行を継続し、次回はもちろんループのため、j < len(B)-1のときにインクリメントされます10はAにインデックスを付けることができません。エラーが発生すると、コンソール出力で3が表示されます。 print文の値の前に "i ="と "j ="を入れてlen(A)とlen(B)を表示した場合、より明白になりますが、コード内のバグを診断するためのすべての情報コンソール出力に既にあります。

エラーを発生させないようにコードを作成する方法を解説します。

+0

これを取得して今、それは魅力的なように働いています、ありがとう@barny –