2013-08-29 24 views

答えて

12
[(a, b, c) for a, (b, c) in l] 

Tuple packing and unpacking問題を解決します。

+1

答えのリンクはどのようにこの問題に役立ちますか? – GreenAsJade

+2

タプル構造を知っているときに機能しますが、その構造が不明であるために平坦化する必要があることがあります。例えばnp.whereは、単一の値を持つタプル、または値のリストを持つタプルを返すことができます。その場合、タプルは異なる方法でアクセスする必要があります。どのようにこの状況を処理できますか? – DanGoodrick

+0

@ DanGoodrick:np.whereはそれをしません。タプルにはリストは含まれません。常にnumpy配列のタプルであり、0次元配列の奇妙な辺の場合を除いて、配列の数は常に入力配列の次元に等しい。別のケースでタプルに別々にアクセスする必要はなく、それをフラット化することはあまり意味がありません。 – user2357112

4

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)] 

を使用することができるようなタプルリテラルで主演式を使用することができますあなたが平らにしたいと思っていた多くの要素を守ります。

1

あなたはこのよう

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

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以上の値があると想像してください...

0

あなたは次の機能を使用して、リスト内のすべての要素にループで適用できます。

仕組み
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:]) 

:タイプがタプルの場合タプルが空の場合、それは「タプル」引数

  • セカンドラインは、空のタプルを返していない場合には、チェックされます

    • ファースト
    • 3行目は、最初の要素を取得し、この溶液中でいいことがある再帰的

    関数を呼び出します:

    • タプルが任意の深さにネストすることができる
    • 所与タプルの構造を知る必要がないコードはわずかに次のソースから適合されているPythonの2.7

  • ワークス:
    https://mail.python.org/pipermail/tutor/2001-April/005025.html

    は、それは誰かが

    を:)ホープ10
  • 関連する問題