【问题标题】:Recursive function return tuples of even index values?递归函数返回偶数索引值的元组?
【发布时间】:2019-02-09 08:32:37
【问题描述】:

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

这是我迄今为止想出的。

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

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

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

【问题讨论】:

    标签: python recursion tuples


    【解决方案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:])
    

    【讨论】:

    • 谢谢,但是我不能修改参数!这就是为什么我试图在我的代码中使用索引切片。
    • G̶l̶o̶b̶a̶l̶̶V̶a̶r̶i̶a̶b̶l̶e̶s̶̶。这是一个菜鸟解决方案。让我看看,如果我能想出什么办法。
    • 但是元组是不可变的,所以我不认为修改工作
    • 元组是不可变的,我同意。但是如果你只是不编辑现有的元组,而是替换它呢?请参阅编辑后的解决方案。
    【解决方案2】:

    你不想要这样的东西吗?

    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:]))
    

    【讨论】:

      猜你喜欢
      • 2017-10-18
      • 2017-10-27
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 2013-06-04
      • 2016-01-24
      • 1970-01-01
      • 2015-10-23
      相关资源
      最近更新 更多