我需要解压缩具有动态长度的二维列表(列表列表)。整个任务是在 lxml 框架的帮助下,从我的列表中形成一个功能齐全的HTML表。
使用this excellent answer作为主干之后,我为我的任务找到了以下代码:
page = (
E.html(
E.body(
E.table(
E.tr(
E.th(E.div("header1")),
...
E.th(E.div("header40")),
),
*[E.tr(
*[
E.td(str(col)) for col in p_list[1] <<- how to put N here???
]
) for row in range(len(p_list))]
, border="2"
)
)
)
)
第一个E.tr
是我的表格的标题,第二个*[E.tr
是从列表p_list
解压缩的。该列表包含N个元素(也称为行),每个元素都是一个列表,其中包含大约50个元素(也就是N行的列)。
p_list
被声明并填充如下:
p_list = list()
rows = table.iter('div')
p_list.append([c.text for c in rows])
rows = table.xpath("body/table")[0].findall("tr")
for row in rows[2:]:
p_list.append([c.text for c in row.getchildren()])
现在这段代码只能输出{strong>相同的行p_list
N次,并且仅适用于硬编码的行号,但如果我想动态指定它以输出整张桌子?
无法弄清楚如何做到这一点。
答案 0 :(得分:1)
将p_list[1]
替换为p_list[row]
。更好的是,不要使用range
:
*[E.tr(
*[ E.td(str(col)) for col in row ]
) for row in p_list ]