0

リストをフラットにしたい:

exampleArray = [[[151.68694121866872]], 
                [[101.59534468349297]], 
                [[72.16055999176308]]]

に:

[151.68694121866872, 101.59534468349297, 72.16055999176308]

今私はこれをやっています:

resultArray= list(chain.from_iterable(list(chain.from_iterable(exampleArray))))

それはうまくいきますが、もっと良い方法があるかどうか知りたかったのです。

4

5 に答える 5

2

どうですか

result = [x[0][0] for x in exampleArray]
于 2012-10-15T09:51:03.013 に答える
1
In [6]: from itertools import chain

In [7]: lis=[[[151.68694121866872]], [[101.59534468349297]], [[72.16055999176308]]]

In [8]: list(chain(*(chain(*lis))))

Out[8]: [151.68694121866872, 101.59534468349297, 72.16055999176308]
于 2012-10-15T09:52:03.183 に答える
1

これより良い方法はありません。これが最も推奨される方法です。公式レシピを見る

def flatten(listOfLists):
    "Flatten one level of nesting"
    return chain.from_iterable(listOfLists)
于 2012-10-15T09:52:24.703 に答える
1

itertools.chainオブジェクト (イテラブル) をリストに変換する必要はありません。

resultArray= list(chain.from_iterable(list(chain.from_iterable(exampleArray))))
# could be rewritten as
resultArray= list(chain.from_iterable(chain.from_iterable(exampleArray)))

.

再帰を使用して深度関数を作成できます。

def deep_chain_from_iterable(it, n):
    if n == 0:
        return list(it)
    else:
        return deep_chain_from_iterable(itertools.chain.from_iterable(it),n-1)

deep_chain_from_iterable(exampleArray, 2)
于 2012-10-15T09:59:41.607 に答える
0

(例のように)固定レベルの深さの場合、十分な回数を合計することができます。

sum(sum(listoflistsoflists, []), [])
于 2012-10-15T11:56:04.357 に答える