2017-11-28 3 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] 

는 편집 : 그것은 재귀 함수해야하는 경우 좋아, 그럼이 작동합니다

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