私はリストの次の要素を持ち、リストは100要素長です。Pythonでタプルを平坦化する方法
[(50, (2.7387451803816479e-13, 219))]
どのように各要素を次のように変換しますか?
[(50, 2.7387451803816479e-13, 219)]
私はリストの次の要素を持ち、リストは100要素長です。Pythonでタプルを平坦化する方法
[(50, (2.7387451803816479e-13, 219))]
どのように各要素を次のように変換しますか?
[(50, 2.7387451803816479e-13, 219)]
[(a, b, c) for a, (b, c) in l]
Tuple packing and unpacking問題を解決します。
PEP 448で導入アンパック追加のタプルとのPython 3.5の新しい、あなたはあなたが記録のために使用され、ネストされたタプルを持っていた場合、これは有用である可能性
>>> 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)]
を使用することができるようなタプルリテラルで主演式を使用することができますあなたが平らにしたいと思っていた多くの要素を守ります。
あなたはこのよう
>> example = [(50, (2.7387451803816479e-13, 219))]
>>> [tuple(x[:1]) + (x[1]) for x in example]
[(50, 2.738745180381648e-13, 219)]
A Pythonのミッチは、Python 3.5のために示唆して何をすべきか2.7互換性のある方法で結果を得ることができます。
>>> 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以上の値があると想像してください...
あなたは次の機能を使用して、リスト内のすべての要素にループで適用できます。
仕組み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:])
:タイプがタプルの場合タプルが空の場合、それは「タプル」引数
関数を呼び出します:
に
は、それは誰かが
を:)ホープ10
答えのリンクはどのようにこの問題に役立ちますか? – GreenAsJade
タプル構造を知っているときに機能しますが、その構造が不明であるために平坦化する必要があることがあります。例えばnp.whereは、単一の値を持つタプル、または値のリストを持つタプルを返すことができます。その場合、タプルは異なる方法でアクセスする必要があります。どのようにこの状況を処理できますか? – DanGoodrick
@ DanGoodrick:np.whereはそれをしません。タプルにはリストは含まれません。常にnumpy配列のタプルであり、0次元配列の奇妙な辺の場合を除いて、配列の数は常に入力配列の次元に等しい。別のケースでタプルに別々にアクセスする必要はなく、それをフラット化することはあまり意味がありません。 – user2357112