簡體   English   中英

在Python中從元組元組轉換為嵌套元組

[英]Convert from tuple of tuples to nested tuples in Python

有一種簡單的轉換方式

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后嘗試過)。

在Window 7上,Python 3.5)最初的遞歸限制大約為300,但可以作為( 引用 )提升。 這與結構t無關,但可能與Python例程訪問結果結構的嵌套級別有關。

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

使用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)))))

對於嵌套構造:

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)

它有多大,我不知道,但我認為這取決於你的機器,你的設置等等......

你可以做到

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

它向后迭代t 您可以構建一個非常深層嵌套的元組,但是您可能無法將其打印出來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM