2017-06-13 6 views
0

異なる長さのリストとしてデータセットを分析しようとしています。自分のデータセットの行(行)を関数ごとに1つずつ呼び出すようにしています。私は関数がリストの長さに関係なく適切に実行されるようにしたい。Q:Python3 - リストの長さを変更するステートメントがある場合

マイコード:私のデータのラインの長さが十分に長くない場合

f = open('DataSet.txt') 
for line in iter(f): 

remove_blanks = [''] 
entries = line.split() 
''.join([i for i in entries if i not in remove_blanks]) 
trash = (entries[0], entries[1]) 
time = int(entries[2]) 
column = [int(v) for v in entries[3:]] 


def myFun(): 
    print(entries) 
    print_string = '' 
    if column[0] == 100: 
     if column[1] >= 250 and column[2] == 300: 
      if len(column) >= 9: 
       digit = [chr(x) for x in column[4:9]] 
       print_string = ('code: ' + ''.join(str(digit[l]) for l in range(5)) + ' ') 
      if len(column) >= 13: 
       optional_digit = [chr(d) for d in column[9:13]] 
       for m in range(0, 4): 
        print_string += 'Optional Field: ' + optional_digit[m] + '' 
      else: 
       print_string += 'No Optional Field ' 
     pass 
    pass 
    print(print_string) 
    print('') 


myFun() 

f.close() 

起こっている何が(つまりリストがcolumn[6]で終了)ですが、私はエラーを取得する:

line 17, in function 
    print('Code: ' + digit[l]) 
IndexError: list index out of range 

リストの長さが異なる場合は、Code: ABC9として印刷され、次の印刷はCode: ABとして印刷されるように、印刷時にはまだCode: #number #number #number #numberを印刷し、存在しない列は空白のままにします。

助けてください! :)

答えて

1

まあ、ちょうどあなたが利用できるよりも長いリストをループしていないことを確認してください:

print_string = 'code: ' + ''.join(str(digit[l]) for l in range(min(5, len(digit)))) + ' ' 

以上:

print_string = "code {} ".format("".join(str(dig) for dig in digit[:5])) 

を、私はあなたがオーバーしている感がありますが、これを複雑にする。

+0

ありがとうございました!私は今プログラムを学んでいるので、これは複雑すぎると確信していますが、あなたのソリューションはうまくいっているようです。 if文のlen(column)条件を変更してコードを入れなければなりませんでした。ありがとう – DRauch

関連する問題