変換する簡単な方法はありますか
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)
それがどれだけ大きくなる可能性があるかについては、私は知りませんが、私はそれがあなたのマシン、あなたの設定などに依存すると思います...