2016-04-14 15 views
0

Aşağıdakileri yeniden yazmak için iyi bir pythonik yol nedir? Buradaki fikir, iç içe geçmiş listelerin farklı endeksleri için farklı eylemleri belirleyebilmektir.İç içe geçirilmiş tuple indeksiyle 2d tuples boyunca yineleme

İç içe geçmiş listelerin yalnızca 2 boyutlu olabileceğini düşünün, ancak hem üst liste hem de iç içe geçmiş herhangi bir uzunluğa sahip olabilir.

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>' 

cevap

1

Kodunuzu daha küçük test edilebilir işlevlere bölmenizi öneririm. Bunun gibi bir şey bakabilirsiniz:

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

Muhtemelen daha eğlenceli yazmak için okumak daha:

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)])) 

Bir satır:

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]) 
İlgili konular