2014-09-03 1 views
0

안녕하세요 저는 함수와 for 루프를 사용하여 다음과 같은 간단한 translator 프로그램을 작성했지만 list comprehension/higher order function을 더 잘 이해하려고합니다. 필자는 map과 listcomprehensions와 같은 함수를 매우 기본적으로 이해하고 있지만, 루프가 아래 코드에서 place_holder와 같은 자리 표시 자 값을 필요로 할 때 어떻게 처리해야하는지 모릅니다. 또한, 내가 더 잘할 수있는 것에 대한 제안은 크게 감사 할 것입니다. 미리 감사드립니다, 여러분!이 함수/for 루프를 목록 이해 자나 파이썬을 사용하는 고차 함수로 변환하는 방법은 무엇입니까?

P.S 내가 게시 된 코드가 메모장 ++에서와 같이 보이는 멋진 형식을 어떻게 얻습니까? 개별적으로 for 루프 내에서 마지막에 항목을 추가 할 append를 호출보다는

sweedish = {'merry': 'god', 'christmas': 'jul', 'and': 'och', 'happy':'nytt','year':'ar'} 
english =('merry christmas and happy new year') 
new = english.split() 
print(' '.join([sweedish[item] for item in new if item in sweedish])) 
+0

멋진 코드 강조 표시는 이미 귀하의 질문에 있지만 정확한 구문은 4 개의 공백으로 들여 쓰는 텍스트 블록을 코드 블록으로 취급하고 렌더링시 구문 형광펜이 트리거됩니다. – rennat

+0

나는 그것을 지금 본다, 전에 나타나지 않고 있었다. –

답변

1

목록의 이해는 단순히 한 번에 목록을 작성 :

sweedish = {'merry': 'god', 'christmas': 'jul', 'and': 'och', 'happy':'nytt','year':'ar'} 
    english =('merry christmas and happy new year') 
    def translate(s): 
     new = s.split() #split the string into a list 
     place_holder = [] #empty list to hold the translated word 
     for item in new: #loop through each item in new 
      if item in sweedish: 
       place_holder.append(sweedish[item]) #if the item is found in sweedish, add the corresponding value to place_holder 
     for item in place_holder: #only way I know how to print a list out with no brackets, ' or other such items. Do you know a better way? 
      print(item, end=' ') 
    translate(english) 

편집 chepner의 대답과 chisaku의 형식 도움말을 표시합니다 .

for item in [ sweedish[item] for item in new if item in sweedish ]: 
+0

단순하고 우아하고 오하이오. 무리 감사! –

0

@chepner가 말했듯이, 당신은 간결 새 목록을 작성하는 지능형리스트를 사용할 수 있습니다 : 당신이 for 루프에서 직접 지능형리스트를 넣을 수 있기 때문에

place_holder = [ sweedish[item] for item in new if item in sweedish ] 

변수 자체가 불필요 영어에서 스웨덴어로 번역 된 단어.

사전에 액세스하려면 swedish.get (word, 'null_value_placeholder')를 사용하면 영어 단어가 사전에없는 경우 KeyError를 얻지 못할 수 있습니다.

예를 들어 '없음'은 사전에 번역이없는 영어 단어의 자리 표시 자입니다. 사전의 틈새 만 대략적인 번역을 제공한다는 것을 인정하는 자리 표시 자로 ''를 사용할 수 있습니다. 지능형리스트는 사전에 표시 단어를 번역하려고 시도 있도록

swedish = {'merry': 'god', 'christmas': 'jul', 'and': 'och', 'happy':'nytt','year':'ar'} 
english ='merry christmas and happy new year' 

def translate(s): 
    words = s.split() 
    translation = [swedish.get(word, 'None') for word in words] 
    print ' '.join(translation) 

translate(english) 

>>> 
god jul och nytt None ar 

또는, 당신은 당신의 지능형리스트에 조건식을 넣을 수 있습니다.

def translate(s): 
    words = s.split() 
    translation = [swedish[word] for word in words if word in swedish.keys()] 
    print ' '.join(translation) 

translate(english) 

>>> 
god jul och nytt ar 

''.join (번역) 기능은 단어 목록을 ''로 구분 된 문자열로 변환합니다.

+0

get과 formatting의 사용법을 좋아합니다. 고마워, ''.join을 사용하는 것은 이전의 복잡한 for 루프보다 훨씬 쉽다. –