1

そのため、python flatten list を stack-overflow/google に入力するだけで、膨大な数の重複した結果が返されます。私はそれらすべてを試しましたが、この特定のインスタンスには適用されません。

pyodbc からデータベースの結果セットを取得しています。これにより、リストのリストに強制できるデータ構造が得られます。返される各行の最初の要素 (最初の列) の形式は"a.b.c"です。でありたいと思います"a", "b", "c"。私の最初の本能は、私がやった期間で分割することでした.

前:

[["a.b.c", "d", 1], ["e.f.g", "h", 2], ... ] # rows left out for brevity

後:

# unfortunately, split returns a list, which then gets nested
[[["a", "b", "c"], "d", 1], [["e", "f", "g"], "h", 2], ... ]

ただし、私が見たいのは次のとおりです。

[["a", "b", "c", "d", 1], ["e", "f", "g", "h", 2], ... ]

リストをフラット化するためのスタック オーバーフローに関する以前の解決策を試しましたが、誰もがネストされたリストについて言及していますが、ネストされたリストのみをフラット化する方法については誰も言いません。

私が試してみました:

from itertools import chain
for row in rows:
    row = list(chain(row)) # python won't allow modifications in a loop

rows = [list(chain(row)) for row in rows]

おそらくyieldを使用して、次のようなことを行う方法が必要だと思います。

for row in rows:
    row = row[0].append(row[1:]) # but this doesn't work either

リストのリスト内の内部リストを変更する方法がわかりません。これまでに試した方法よりも良い方法があれば、ぜひ聞きたいです。よろしくお願いします。

4

1 に答える 1

7

どうですか:

>>> s = [["a.b.c", "d", 1], ["e.f.g", "h", 2]]
>>> [k[0].split('.') + k[1:] for k in s]
[['a', 'b', 'c', 'd', 1], ['e', 'f', 'g', 'h', 2]]

これはsplit、最初の要素に作用した後に返されるリストを取得し、残りの要素で構成されるリストに追加します。

于 2013-04-20T21:29:21.683 に答える