リストのリストをフラット化する [重複] 質問する

リストのリストをフラット化する [重複] 質問する

Python の角括弧に問題があります。次の出力を生成するコードを書きました:

[[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]

しかし、それを使って計算を実行したいのですが、角括弧のせいでそれができません。

括弧を削除するにはどうすればいいでしょうか? 削除する例をいくつか見ましたが、このケースには適用できませんでした。

ベストアンサー1

リストをフラット化して「括弧を外してください」ネストされたリストの理解を使用します。これにより、リストのリストに格納されている各リストのネストが解除されます。

list_of_lists = [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
flattened = [val for sublist in list_of_lists for val in sublist]

ネストされたリストの内包表記は、展開されたときと同じ方法で評価されます (つまり、新しいループごとに改行とタブが追加されます)。つまり、この場合は次のようになります。

flattened = [val for sublist in list_of_lists for val in sublist]

は以下と同等です:

flattened = []
for sublist in list_of_lists:
    for val in sublist:
        flattened.append(val)

大きな違いは、リスト comp は、展開されたループよりもはるかに高速に評価され、追加呼び出しがなくなることです。

サブリストに複数の項目がある場合、リストコンプはそれをフラット化します。つまり、

>>> list_of_lists = [[180.0, 1, 2, 3], [173.8], [164.2], [156.5], [147.2], [138.2]]
>>> flattened  = [val for sublist in list_of_lists for val in sublist]
>>> flattened 
[180.0, 1, 2, 3, 173.8, 164.2, 156.5, 147.2,138.2]

おすすめ記事