[英]spark python convert RDD tuple with nested tuples into sigle tuple
[英]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.