web-dev-qa-db-ja.com

python)でタプルをフラット化する方法

リストには次の要素があり、リストの長さは100要素です。

[(50, (2.7387451803816479e-13, 219))]

各要素を次のように変換するにはどうすればよいですか?

[(50, 2.7387451803816479e-13, 219)]
18
olliepower
[(a, b, c) for a, (b, c) in l]

タプルのパッキングとアンパッキング 問題を解決します。

Python 3.5で、追加のタプルアンパックが導入されました PEP 448 で、タプルリテラルでスター付きの式を使用できるようになりました。

>>> l = [(50, (2.7387451803816479e-13, 219)), (40, (3.4587451803816479e-13, 220))]
>>> [(a, *rest) for a, rest in l]
[(50, 2.738745180381648e-13, 219), (40, 3.458745180381648e-13, 220)]

これは、フラット化する多くの要素を含む記録管理にネストされたタプルを使用している場合に役立ちます。

6
miradulo

次の関数を使用して、リスト内のすべての要素にループで適用できます。

import type

def flatten(T):
    if type(T) != types.TupleType: return (T,)
    Elif len(T) == 0: return ()
    else: return flatten(T[0]) + flatten(T[1:])

使い方:

  • 最初に、型がタプルであるかどうかがチェックされ、そうでない場合は、引数を「タプル」します
  • タプルが空の場合、2行目は空のタプルを返します
  • 3行目は最初の要素を取得し、関数を再帰的に呼び出します

このソリューションの良いところは次のとおりです。

  • 与えられたタプルの構造を知る必要はありません
  • タプルは任意の深さでネストできます
  • Python 2.7で動作します

コードは、次のソースからわずかに適合されています。
https://mail.python.org/pipermail/tutor/2001-April/005025.html

それが誰かを助けることを願っています:)

1
sagacity

Python 2.7互換性のある方法でMitchがPython 3.5。

>>> example =  [(50, (2.7387451803816479e-13, 219)),
            (100, (3.7387451803816479e-13, 218))]
>>> [(lambda *x: x)(k, *r) for k, r in example]
[(50, 2.738745180381648e-13, 219), (100, 3.7387451803816477e-13, 218)]

この方法の利点は、受け入れられた回答のようにフラット化するために、内部タプルの各値の変数名を見つける必要がないことです。 2つまたは3つの項目がある場合、それは実際には問題ではありませんが、10分の1以上の値があると想像してください...

1
kriss

この方法で結果を得ることができます

>> example =  [(50, (2.7387451803816479e-13, 219))]
>>> [Tuple(x[:1]) + (x[1]) for x in example] 
[(50, 2.738745180381648e-13, 219)]
1