2015-04-22 4 views
0

У меня есть этот кусок:Назначение переменных в петлевой Python

As, Bs, Cs, Ds, Es = ([] for i in range(5)) 
for line in infile: 
    line = line.rstrip() 
    a, b, c, d, e = line.split('\t') 
    As += [a] 
    Bs += [b] 
    Cs += [c] 
    Ds += [d] 
    Es += [e] 

Так как у меня гораздо больше, чем просто 5, я хочу сделать это с петлей, которая занимает меньше строк кода, чем писать все это вне. Что-то вроде:

As, Bs, Cs, Ds, Es = ([] for i in range(5)) 
dynamic_variable_list = [As, Bs, Cs, Ds, Es] 
    for line in infile: 
     line = line.rstrip() 
     for i in range(len(line.split('\t'))): 
      dynamic_variable_list[i] += line.split('\t')[i] 

Что в моем случае хранит отдельные символы в списке, в то время как:

dynamic_variable_list[i] += line.split('\t') 

хранит все вкладки разделителями записей в каждой из переменных dynamic_variable_list. Мне нужно хранить все записи с разделителями табуляции в отдельных переменных, как показывает верхний пример.

ответ

1
dynamic_variable_list[i] += line.split('\t')[i] 

Может быть переписано как

As += a 

Вместо того

As += [a] 

Либо объемного звучания в скобках, как и раньше, или использовать append. Вернее, разделите список, а затем сделайте его более понятным.

dynamic_variable_list = [As, Bs, Cs, Ds, Es] 
    for line in infile: 
     columns = line.rstrip().split('\t') 
     assert(len(columns)==len(dynamic_variable_list)) 
     for index, col in enumerate(columns): 
      dynamic_variable_list[index].append(col) 
+0

спасибо, что работает! –

+0

{book = xlrd.open_workbook ('file.xls') first_sheet = book.sheet_by_index (0) As, Bs, Cs, Ds, Es = ([] для i в диапазоне (5)) dyn_var_list = [As, Bs, Cs, Ds, Es] assert (len (first_sheet.row_values ​​(0)) == len (dyn_var_list)) для индекса, col в enumerate (first_sheet.row_values ​​(0)): dyn_var_list [index] .append (col)} однако теперь я получаю только первый элемент в моем dyn_var_list. Какие-нибудь предложения здесь, возможно? Я попробовал "first_sheet.col_values ​​(0)" и "xrange (1, first_sheet.ncols):" –

Смежные вопросы