2017-09-03 5 views
-1

目的は簡単です:x個の数字が `/ 'で区切られたファイルがあります。ファイル内に番号のDublicateがある場合は、削除する必要があります。私は、nメンバーをnからlen(配列)までの他のメンバーと比較することでこれを解決することにしました。コードは:Pythonで重複をチェックする配列を通過するときにリストが範囲外になる2.7

#deletes repeated numbers separated by ` 
questioned=open("key_file.txt",'r+') 
numbers=questioned.read() 
#print(numbers) 
numb=[] 
number=[] 
for each in numbers: 
    if each=='`': 
     number.append(''.join(numb)) 
     numb=[] 
    else: 
     numb.append(each) 
i,j=0,0 
for i in xrange(len(number)): #we don't need to compare last number 
    for j in xrange(i+1,len(number)-1):#don't need to compare to itself 
     #print(len(number)," ",i," ",j) 
     if number[i]==number[j]: 
      number.pop(j) #tried del number[j] 


questioned.close() 

しかし、私が、私はxrangeのがlen(配列)に行く必要があることを指定したにもかかわらず、プロセス中の範囲から抜け出すために管理しているようです。私の推測では、数字の束が削除されたために範囲から外れていることにつながるlen(数)が継続的に再評価されていないのでしょうか? ポインタ/ヒントは素晴らしいでしょう。あなたのお時間をありがとう!

答えて

0

申し訳ありませんが、私の恐怖は正しいと思われます。 2番目のループでは、jはlen(number)を超えてエラーにつながります...

#deletes repeated numbers separated by ` 
questioned=open("key_file.txt",'r+') 
numbers=questioned.read() 
#print(numbers) 
numb=[] 
number=[] 
for each in numbers: 
    if each=='`': 
     number.append(''.join(numb)) 
     numb=[] 
    else: 
     numb.append(each) 
i,j=0,0 
def compare(number,i,j): 
    if number[i]==number[j]: 
     number.pop(j) 
     compare(number,i,j) 
    return number 

for i in xrange(len(number)): 
    for j in xrange(i+1,len(number)-1): 
     if j>len(number)-1: 
      break 
     #print(len(number)," ",i," ",j) 
     #try: 
      compare(number,i,j) 

     #except: print('i,j',i,' ',j,'len ',len(number)) 

questioned.close() 

try文なしでうまく動作します。なぜこのようなことが起こるのか分かりませんが、そうであるようです。皆さんには偉大な説明があります:/

関連する問題