【问题标题】:Recursion in python to find odd positions in listpython中的递归以查找列表中的奇数位置
【发布时间】:2019-09-26 15:39:19
【问题描述】:

回想一下,长度为 n 的列表中的位置是 0,1,…,n-1。我们想编写一个函数 oddpositions(l),它返回 l 中奇数位置的元素。换句话说,函数应该返回列表 [l[1],l[3],...]。例如oddpositions([]) == []、oddpositions([7]) == []、oddpositions([8,11,8]) == [11] 和oddpositions([19,3,44,44, 3,19]) == [3,44,19]。下面给出了奇数位置的递归定义。您必须为递归调用填写缺少的参数。

def oddpositions(l):
  if len(l) <= 1:
    return([])
  else:
    return(...)

例子: oddpositions([8,11,8]) 必须产生 [11]

【问题讨论】:

  • 对于l 的列表,您可以使用l[1::2]
  • 感谢您为我的案例提供的答案
  • @a_guest 那是如何递归的?
  • @schwobaseggl 这就是你应该如何在 Python 中解决这个问题。如果你真的喜欢你可以认为它的递归深度为零:-)
  • 好吧不是,但我之前无法得到答案,从你的方法我能够得到一个评估

标签: python python-3.x list recursion


【解决方案1】:

以下会做:

def oddpositions(lst):
    if len(lst) <= 1:
        return [] 
    else:
        return [lst[1]] + oddpositions(lst[2:])

>>> oddpositions([])
[]
>>> oddpositions([7])
[]
>>> oddpositions([8,11,8])
[11]
>>> oddpositions([19,3,44,44,3,19])
[3, 44, 19]

【讨论】:

  • 为什么不改用return list[1:-2:2] + oddpositions(lst[-2:])?这也是递归的并且效率更高:-) 例如尝试oddpositions(list(range(1_000_000)))
  • 我知道你在那里做了什么 :) 但那是假递归,为什么不首先 return list[1::2] + oddpositions([]) :P 当然,如果有人追求性能,他们根本不会追求递归.
猜你喜欢
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2014-07-28
相关资源
最近更新 更多