[英]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.