127

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

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

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

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

4

4 に答える 4

199

ネストされたリスト内包表記を使用して、リストをフラット化し、 「ブラケットを削除」します。これにより、リストのリストに格納されている各リストのネストが解除されます!

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 は unraveled ループよりもはるかに高速に評価され、append 呼び出しが不要になることです!

サブリストに複数のアイテムがある場合、リスト構成はそれを平坦化します。すなわち

>>> 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]
于 2012-06-29T15:36:19.280 に答える
144

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

from itertools import chain
list(chain.from_iterable([[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]))
于 2012-06-29T15:39:39.593 に答える
26

与えられた

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

およびあなたの特定の質問: どうすればブラケットを削除できますか?

リスト内包表記の使用:

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

これをくれます

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

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

データのコレクションを作成する場合は、ある種のブラケットまたは括弧を使用します。

注意してください、この解決策はあなたの質問/問題に特化したものであり、一般化された解決策を提供するものではありません。つまり、それはあなたのケースで機能します。

于 2012-06-29T15:35:40.783 に答える
2
>>> 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]
于 2012-06-29T15:36:21.800 に答える