2017-09-27 9 views
0

2dリストにセルをマージしたい、新しい行が次の空の行にマージされる。 これを設計するロジックに苦労しています。私はhtmlテーブルを解析し、それを2次元のリストに変換し、空の行で区切られた行をマージしたいと思います。例えば、 。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 

ありがとうございました。

+2

[これらのガイドライン](https://stackoverflow.com/help/how-to-ask)を読んで、何を試してみてください。あなたが何かを試みたコミュニティを表示すると、答えを受け取る可能性が高くなります。 –

+0

** **あなたはどんな仕事をしていますか?文字列? –

+0

@ juanpa.arrivillagaはい文字列で作業しています – otje

答えて

1

あなたは、文字列で作業していると仮定すると、 itertools.groupbyany

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

0

あなたのようにこれを達成するためにzipitertools.groupbyを使用してリスト内包を作成することがあります。data変数が値を保持しているところ

>>> 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 = [['a', 'b', 'c'], 
     ['d', 'e', 'f'], 
     ['','',''] 
     ['q', 'r', 's'], 
     ['t', 'u', 'v'], 
     ['m', 'n', 'o'], 
     ['','',''], 
     ['g', 'h', 'i'], 
     ['j', 'k', 'l']] 
関連する問題