递归函数返回偶数索引值的元组?

时间:2019-02-09 08:32:37

标签: python recursion tuples

是否可以通过递归返回仅偶数索引的元组?

这是我到目前为止提出的。

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')

有些要求我根本无法更改或重新分配参数。

进行此递归的最佳方法是什么? 如果是数字列表,我可以解决,但是这个有问题。

2 个答案:

答案 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:]))
相关问题