2017-06-13 61 views
0

我試圖將數據集分析爲不同長度的列表。我正在逐個調用我的數據集的行(行),以便通過我的函數進行分析。無論列表的長度如何,我都希望函數仍能正常運行。問: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: #number #number #number #number,並在打印時留下任何不存在的空白欄作爲空白,以便一行可以打印爲Code: ABC9,如果有不同的清單長度,則打印爲Code: AB

請幫忙! :)

回答

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