通过嵌套元组的索引

时间:2016-04-14 15:52:56

标签: python-2.7

重写以下内容有什么好的pythonic方法?我们的想法是能够为嵌套列表的不同索引决定不同的动作。

考虑嵌套列表只能是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>' 

2 个答案:

答案 0 :(得分: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 :(得分: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])