【问题标题】:How to apply only the first names from a list with full names to a new list using a recursive function如何使用递归函数仅将具有全名的列表中的名字应用于新列表
【发布时间】:2018-05-12 02:47:09
【问题描述】:

我一直在尝试找到一种方法来删除姓氏并将名字附加到使用此递归函数的新列表中。

nameList = ['Julia Truong', 'Chen Wu', 'Jebb Castro', 'Ron Kenndey', 'X Y']

def convertName(nameList):
    if nameList == []:
        return [] 
 else:
    head = nameList[0:1]
    rest = nameList[1:]
    return head + convertName(rest)
 print(convertName(nameList))

【问题讨论】:

  • 你的空格有点乱。你什么意思?会发生什么?怎么了?

标签: python string list function recursion


【解决方案1】:

我认为您不需要递归函数。

new_list = [name.split()[0] for name in nameList]

编辑: 好的,如果它必须是递归函数,那么这可行:

 def convertName(nameList):
      if nameList == []:
          return []
      elif len(nameList) == 1:
          return [nameList[0].split()[0]]
      else:
          head = nameList[:1]
          rest = nameList[1:]
          print('head {}, rest {}'.format(head, rest))
          return convertName(head)+convertName(rest)

然后输出是这样的:

 >>> print(convertName(nameList))
    head ['Julia Truong'], rest ['Chen Wu', 'Jebb Castro', 'Ron Kenndey', 'X Y']
    head ['Chen Wu'], rest ['Jebb Castro', 'Ron Kenndey', 'X Y']
    head ['Jebb Castro'], rest ['Ron Kenndey', 'X Y']
    head ['Ron Kenndey'], rest ['X Y']
    ['Julia', 'Chen', 'Jebb', 'Ron', 'X']

当然你可以删除函数内部的print - 我把它留在那里是为了向你展示它是如何工作的,因为它是考试复习。我仍然觉得这很不合 Python,我真的更喜欢这里的列表理解。

【讨论】:

  • 我需要使用递归函数。
  • 为什么需要递归函数?是家庭作业吗?
  • 这是我期末考试的复习题,涉及递归。
  • 检查编辑。如果满意,请标记为已完成。
【解决方案2】:

这是我开发的,效果很好。

def convertNames(nameList):
    if nameList==[]:
        return []
else:
    head = nameList[0:1]
    rest = nameList[1:]
    head = head[0].split(' ')
    head.remove(head[1])
    return head + convertNames(rest)
print(convertNames(['Julia Truong','Chen Wu','Jeb Castro','Ron Kennedy','X Y']))

【讨论】:

  • 它不是真正的递归,你假设 nameList 总是看起来一样等等。检查我编辑的答案以获得完全递归版本。
猜你喜欢
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
相关资源
最近更新 更多