繁体   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