2

タプルの要素ごとの追加はかなり簡単です。

a = (1,2,3,4)
b = (2,4,6,8)
tuple(x+y for x,y in zip(a,b))

(3,6,9,12)

しかし、ネストされたタプルを使用した要素ごとの加算はより複雑です。

a = ((1,2),(3,4),(5,6))
b = ((2,4),(6,8),(10,12))
tuple(x+y for tup_a, tup_b in zip(a,b) for x,y in zip(tup_a,tup_b))

(3,6,9,12,15,18)

タプルはフラット化されます。タプルの構造を維持しながら、nusted タプルで要素ごとの加算を実行するにはどうすればよいですか?

これは望ましい出力です:

((3,6),(9,12),(15,18))
4

2 に答える 2

1

ジェネレータ式をネストします。

tuple(tuple(x + y for x, y in zip(tup_a, tup_b)) for tup_a, tup_b in zip(a, b))

デモ:

>>> a = ((1,2),(3,4),(5,6))
>>> b = ((2,4),(6,8),(10,12))
>>> tuple(tuple(x + y for x, y in zip(tup_a, tup_b)) for tup_a, tup_b in zip(a, b))
((3, 6), (9, 12), (15, 18))
于 2013-10-19T19:57:57.797 に答える
1
def xsum(a,b):
    if isinstance(a,(list,tuple)) and isinstance(b,(list,tuple)):
       return [xsum(x,y) for x,y in zip(a,b)]
    return a+b

a = ((1,2),(3,4),(5,6))
b = ((2,4),(6,8),(10,12))
print [xsum(x,y) for x,y in zip(a,b)]

おそらく私がすることです。これは、2つだけではなく、より多くの深さのレベルでも機能するはずです

于 2013-10-19T19:59:30.827 に答える