我想知道你是否可以提供帮助。
我有一个看起来像
的元组(1,2,(3,4,(5,(6,4),2),1,2))
我想查找所有号码及其位置。 例如,我想要除了元组中的第一个以外的所有整数。我写了一个递归脚本来做到这一点,
a=[]
def getNumbers(t):
for i,item in enumerate(t):
if type(item) is int:
if i > 0:
a.append(item)
else:
getNumbers(item)
但我似乎无法确定他们在整体元组中的深度。你能帮忙吗?
答案 0 :(得分:3)
当您调用递归函数时,需要计算深度,当初始调用的深度为零时,然后在每次递归调用时调用depth + 1
。
data = (1,2,(3,4,(5,(6,4),2),1,2)) a=[]
def getNumbers(t, depth):
for i,item in enumerate(t):
if type(item) is int:
if i > 0:
a.append(item)
else:
getNumbers(item, depth + 1)
# call passing initial depth of 0.
getNumbers(data, 0)
答案 1 :(得分:2)
我的结构有点不同。这是一个解决方案,它为您提供了一个字典映射您正在寻找的项目(嵌套级别,索引)元组,并且不依赖于外部容器:
def findall(tup, which, res=None, nest=0):
'tup: nested tuple, which: set of items to find'
if res is None:
res = {}
for index, item in enumerate(tup):
if isinstance(item, tuple):
findall(item, which, res, nest+1)
elif item in which:
res.setdefault(item, []).append((nest, index))
return res
print(findall((1,2,(3,4,(5,(6,4),2),1,2)), {3,4}))
输出:{3: [(1, 0)], 4: [(1, 1), (3, 1)]}
读取:
3在指数0处处于嵌套级别1
4是在索引1处的嵌套级别1
4是在索引1处的嵌套级别3。