Чи є простий спосіб перетворення
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
Вкладеність необмежена (спробували з 10000 після встановлення ліміту рекурсії до 100).
У вікні 7, Python 3.5) границя рекурсії спочатку становить близько 300, але її можна скасувати як (довідка). Це не пов'язано зі структурою t
, але може бути пов'язано з рутинною роботою Python, що має доступ до вкладених рівнів отриманої структури.
sys.getrecursionlimit() # display current recursion level
sys.setrecursionlimit(10000) # set recursion level to 1000
Відповіді:
0 для відповіді № 1Ви могли б зробити
def convert(t):
result = t[-1]
for x in t[-2::-1]:
result = x + (result,)
return result
який переходить назад t
. Можливо, ви можете побудувати дуже глибоко вкладений кортеж, але у вас може виникнути проблема з його роздруком.
6 для відповіді № 2
Використовуючи 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)))))
0 для відповіді № 3
Для вкладеної конструкції:
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)
за те, наскільки велика вона може бути, я не знаю, але я припускаю, що це залежить від вашої машини, ваших налаштувань і так далі ...