/ / Pythonのタプルのタプルからネストされたタプルに変換 - python、algorithm、python-3.x、再帰、データ構造

タプルのタプルから、ネストされたタプルに変換する - Python、アルゴリズム、Python-3.x、再帰、データ構造

変換する簡単な方法はありますか

t = ((1,), (1, 2), (1, 2, 3), (1, 2, 3, 4), (1, 2, 3, 4, 5))

次の再帰構造体へ。ここで、続く各タプルは、前のタプルの要素として追加されます。

(1, (1, 2, (1, 2, 3, (1, 2, 3, 4, (1, 2, 3, 4, 5)))))

このネスティングの限界は何ですか? 1000または10000のそのようなネストしたタプルを持つことができますか?

更新: そうみたいです t 入れ子は無制限です(再帰制限を100に設定した後に10000で試してください)。

ウィンドウ7、Python 3.5)では、再帰制限は最初は約300ですが、次のように引き上げることができます。参照)これは構造とは関係ありません tしかし、結果として生じる構造のネストされたレベルにアクセスするPythonルーチンに関連している可能性があります。

sys.getrecursionlimit()   # display current recursion level
sys.setrecursionlimit(10000)  # set recursion level to 1000

回答:

回答№1は0

あなたはできる

def convert(t):
result = t[-1]
for x in t[-2::-1]:
result = x + (result,)
return result

これは逆方向に繰り返します t。おそらく非常に深くネストされたタプルを作成できますが、それを印刷するのに問題があるかもしれません。


回答№2の6

使用 functools.reduce

>>> from functools import reduce
>>> t = ((1,), (1, 2), (1, 2, 3), (1, 2, 3, 4), (1, 2, 3, 4, 5))
>>> reduce(lambda a, b: b + (a,), reversed(t), ())
(1, (1, 2, (1, 2, 3, (1, 2, 3, 4, (1, 2, 3, 4, 5)))))

回答№3の場合は0

入れ子構造の場合

def f(t):
res = t[-1]
for x in t[-2::-1]:
res = x + (res,)
return res

t = ((1,), (1, 2), (1, 2, 3), (1, 2, 3, 4), (1, 2, 3, 4, 5))
print f(t)

それがどれだけ大きくなる可能性があるかについては、私は知りませんが、私はそれがあなたのマシン、あなたの設定などに依存すると思います...