2017-11-28 9 views
2

私は姓を削除し、この再帰関数を使用して新しいリストに最初の名前を追加する方法を見つけようとしています。再帰関数を使用して、完全な名前のリストから新しいリストに最初の名前のみを適用する方法

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)) 
+1

空白がちょっと混乱しています。どういう意味?なんて思う?何がうまくいかないの? – doctorlove

答えて

2

私はあなたがそのために再帰的な機能を必要とは思わない。

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

EDIT: オーケー、それは再帰関数する必要がある場合は、この作品:

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を削除することができます - 私はそれが試験のレビューであるので、それがどのように動作するかを示すためにそこにそれを残しました。私はまだこれが非常に不快であると感じています、そして、私は本当にリストの理解をここで好むでしょう。

+0

再帰関数を使う必要があります。 –

+0

再帰関数が必要なのはなぜですか?宿題はあるのですか? – jo9k

+0

再帰をカバーする私の最終試験のレビューの質問です。 –

0

これは私が開発したもので、正常に動作します。

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'])) 
+0

これは本当に再帰的ではありません、あなたはnameListは常に同じものと見なすと仮定します。完全に再帰的なバージョンの私の編集された答えを確認してください。 – jo9k

関連する問題