是否可以通过递归返回仅偶数索引的元组?
这是我到目前为止提出的。
def even(tup):
if not tup:
return ()
if tup.index(tup[0])+1 % 2 == 0:
return tuple(tup[0]) + even(tup[1:])
传递的参数将如下所示:
('c','b','z','e','m','f','j')
我想要的结果是:
元组中的第一个元素计数为1 ='c',因此对于偶数,它将返回b,e和f。
('b','e','f')
有些要求我根本无法更改或重新分配参数。
进行此递归的最佳方法是什么? 如果是数字列表,我可以解决,但是这个有问题。
答案 0 :(得分:1)
我能够提出这种递归策略。我猜是菜鸟策略。 :P
a = ('c','b','z','e','m','f','j')
def recFunc(a, theIndex):
if theIndex%2 == 1:
if theIndex < len(a):
value = recFunc(a, theIndex+1)
return (a[theIndex], ) + value
else:
return ()
else:
return (recFunc(a, theIndex+1))
print(recFunc(a, 0))
这似乎是不言而喻的。 :)
注意:最大深度达到〜1000个元素。
编辑:如果您无法添加任何其他参数并对其进行更改,那么这种解决方案(从您的工作中得到启发)又如何呢?
def recFunc(a):
if len(a) == 0 or len(a) == 1:
return ()
# print(a)
return (a[1],) + recFunc(a[2:])
答案 1 :(得分:1)
您不想要这样的东西吗?
tup = tuple(item for i, item in enumerate(tup) if i % 2 == 1)
此处不需要递归功能。如果您要处理tuple()
个项目,建议您将其转换为list()
。
我也不确定您要在这里实现什么:
if tup.index(tup[0])+1 % 2 == 0:
tup[0]
返回第一个元素tup.index(tup[0])
返回第一个元素的索引=> 0
0+1 % 2 == 0
总是False
但是返回“偶数”索引值的元组的递归函数可能看起来像这样:
def even(tup):
if len(tup) <= 1:
return
elif len(tup) <= 3:
return tup[1]
return (tup[1], *even(tup[2:]))