python合并2维列表中的单元格上的行
问题描述:
我想合并2d列表中的单元格,新行合并到下一个空行上。努力用逻辑来设计这个。我解析了一个html表格并将其转换为二维列表,并希望合并由空行分隔的行。 例如。python合并2维列表中的单元格上的行
data = [[a, b, c]
[d, e, f]
['','','']
[q, r, s]
[t, u, v]
[m, n, o]
['','','']
[g, h, i]
[j, k, l]]
结果应该是:
new_data = [[ad, be,cf]
[qtm, run, svo]
[gj, hk, il]]
这是我的功能,我stucked进步吧。
def _merge_data_cells(table_grid):
header, data = table_grid
if header is None or data is None:
return
offset_row = True
while offset_row:
for i, row in enumerate(data):
if is_empty(row):
offset_row = False
break
for cell in row:
return header, data
预先感谢您的帮助。
答
假设你正在处理字符串,使用itertools.groupby
和any
:
In [6]: data = [['a', 'b', 'c'],
...: ['d', 'e', 'f'],
...: ['','',''],
...: ['q', 'r', 's'],
...: ['t', 'u', 'v'],
...: ['m', 'n', 'o'],
...: ['','',''],
...: ['g', 'h', 'i'],
...: ['j', 'k', 'l']]
In [7]: from itertools import groupby
In [8]: grouped = groupby(data, any)
In [9]: [list(map(''.join, zip(*g))) for k, g in grouped if k]
Out[9]: [['ad', 'be', 'cf'], ['qtm', 'run', 'svo'], ['gj', 'hk', 'il']]
+0
非常感谢你,它的工作! – otje
答
你可以创建一个使用zip
和itertools.groupby
实现列表理解此为:
>>> from itertools import groupby
>>> [[''.join(x) for x in zip(*j)] for i, j in groupby(data, lambda x: x[0]!='') if i]
[['ad', 'be', 'cf'], ['qtm', 'run', 'svo'], ['gj', 'hk', 'il']]
其中data
变量持有的值:
data = [['a', 'b', 'c'],
['d', 'e', 'f'],
['','','']
['q', 'r', 's'],
['t', 'u', 'v'],
['m', 'n', 'o'],
['','',''],
['g', 'h', 'i'],
['j', 'k', 'l']]
请阅读[这些指导方针](https://*.com/help/how-to-ask)并告诉我们你有什么尝试。如果你向社区表明你已经尝试了某些东西,那么你很可能会收到答案。 –
你究竟在做什么**?字符串? –
@ juanpa.arrivillaga是的,我正在使用字符串 – otje