2016-04-14 68 views
0

重寫以下內容的好方法是什麼?這個想法是能夠爲嵌套列表的不同索引決定不同的動作。通過嵌套tuple的索引對2d元組進行迭代

考慮嵌套列表只能是2維,但頂部列表和嵌套可以有任何長度。

resulttable = '' 
list2d = [[1,2][3,4]] 
for row in list2d: 
    newrow=u'<tr>' 
    for idx in range(len(row)):if idx=0 .... 
     if idx==0: 
      newrow=newrow+u'<td align="left">'+unicode(row[idx])+u'</td>' 
     else: 
      newrow=newrow+u'<td align="right">'+unicode(row[idx])+u'</td>' 
    resulttable+=newrow + '</tr>' 

回答

1

我建議你把你的代碼分成更小的可測試函數。它可以是這個樣子:

def _cell2td(idx, cell): 
    if idx == 0: 
     return u'<td align="left">' + unicode(cell) + u'</td>' 
    return u'<td align="right">' + unicode(cell) + u'</td>' 

def _row2tr(row): 
    tds = [_cell2td(idx, cell) for idx, cell in enumerate(row)] 
    row_repr = u'<tr>' + u''.join(tds) + u'</tr>' 
    return row_repr 

list2d = [[1, 2], [3, 4]] 
trs = map(_row2tr, list2d) 
resulttable = ''.join(trs) 
1

可能更容易寫比它是閱讀:

list2d = [[1,2],[3,4]] 
resulttable= "" 
for row in list2d: 
    resulttable += "<tr>{}</tr>".format("".join([u'<td align="left">'+unicode(val)+u'</td>' if y == 0 else u'<td align="right">'+unicode(val)+u'</td>' for y, val in enumerate(row)])) 

一號線:

resulttable = "".join(["<tr>%s</tr>" % "".join([u'<td align="left">%s</td>' % unicode(val) if y == 0 else u'<td align="right">%s</td>' % unicode(val) for y, val in enumerate(row)]) for row in list2d])