`sum` はリストをどのようにフラット化しますか? 質問する

`sum` はリストをどのようにフラット化しますか? 質問する

のような多次元リストは、l=[[1,2],[3,4]]を実行することで 1D リストに変換できますsum(l,[])。これはどのように行われるのでしょうか?

(これは、より高次の多次元リストでは直接機能しませんが、それらのケースを処理するために繰り返すことができます。たとえば、A が 3D リストの場合、sum(sum(A),[]),[]) は A を 1D リストに平坦化します。)

ベストアンサー1

リストがnested、おっしゃるとおり「2D」である場合 (つまり、1 レベル下のみに移動し、1 レベル下の項目はすべてnestedリストである)、単純なリストの理解は次のようになります。

flat = [x for sublist in nested for x in sublist]

これは私が推奨するアプローチです。mingよりもはるかに効率的ですsumsum数字-- 非数値を「合計」しようとするすべての試みを何らかの方法でブロックするのは面倒すぎました... 私はsumPython 標準ライブラリの の最初の提案者であり最初の実装者なので、知っているべきだと思います;-)。

「必要なだけ深く」進みたい場合(深くネストされたリストの場合)、再帰が最も簡単な方法ですが、再帰を排除することで、(より複雑になるという代償を払って)より高いパフォーマンスを得ることができます。

このレシピ再帰的な解決策、再帰の排除、およびその他のアプローチを提案します (すべて有益ですが、この回答で前述したワンライナーほど単純なものはありません)。

おすすめ記事