web-dev-qa-db-ja.com

リストのフラット化

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

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

しかし、私はそれでいくつかの計算を実行したいと思いますが、角括弧は私をさせません。

ブラケットを取り外すにはどうすればよいですか?そのための例をいくつか見ましたが、このケースに適用できませんでした。

82
Hellfish

ネストされたリスト内包表記を使用して、リストを"括弧を削除"にフラット化します。これにより、リストのリストに保存されている各リストのネストが解除されます!

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が解かれたループより速くMUCHを評価し、追加呼び出しを排除することです!

サブリストに複数のアイテムがある場合、リストコンプはそれをフラット化します。すなわち

>>> 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]
142
Paul Seeb

私はitertools.chainを使用します-これは各サブリストの> 1要素にも対応します:

from itertools import chain
list(chain.from_iterable([[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]))
98
Jon Clements

与えられた

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

およびspecificquestion:- どのようにブラケットを削除できますか?

リスト内包表記の使用:

new_d = [i[0] for i in d]

あなたにこれを与えます

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

適切なインデックスを使用して個々のアイテムにアクセスできます。たとえば、new_d[0]180.0などを提供し、数学に使用できます。

データのコレクションを作成する場合は、何らかの括弧または括弧を使用します。

、このソリューションは特にあなたの質問/問題を対象としています。一般的なソリューションを提供しません。つまり、それはあなたの場合に機能します。

16
Levon
>>> lis=[[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
>>> [x[0] for x in lis]
[180.0, 173.8, 164.2, 156.5, 147.2, 138.2]
1