2014-01-30 2 views
1

안녕하세요, 저는 목록에서 가장 긴 단어의 길이를 반환하는 python 프로그램을 만들려고하고 있지만 잘 작동하지 않습니다. 문제는 매우 간단합니다, 사실목록에서 가장 긴 단어의 len을 반환하십시오.

def find_longest_word(): 
    list1 = ['a','aa','aaa','aaaa','aaaaa','aaaaaa','aaaaaaa','aaaaaaaa',] 
    max1 = '' 
    for x in range (0, len(list1)): 
     if (len(max1) < len(list1[x])): 
      max1 = list1[x] 
    return max1  


def main(): 
    m = find_longest_word() 
    print len(m) 
+1

실제 스크립트가 들여 쓰여진 모양입니까? – wnnmaw

+0

그럼 뭐가 문제 야? 네가 그것을 실행할 때 어떻게 될까? "작동하지 않는다"고 말하지 마라! – Blorgbeard

+0

실제로 어떤 일이 발생합니까? "그렇게 잘 작동하지 않는다"는 것은 매우 모호합니다. 우리가 아는 모두를 위해, 그것은 잘 작동 할 수 있고, 당신은 그것이 더 잘 작동하기를 원할 것입니다. – user2357112

답변

8

: 여기

코드 당신이 스크립트의 끝에서 main 함수를 호출하는 것을 잊었다 :

main() 

당신이 그것을 할 때 인쇄 할 때와 마찬가지로 8을 인쇄합니다. 당신이 max하고 key function를 사용하는 경우


그러나, 당신은 훨씬 쉽게이 작업을 수행 할 수 있습니다

>>> list1 = ['a','aa','aaa','aaaa','aaaaa','aaaaaa','aaaaaaa','aaaaaaaa',] 
>>> max(list1, key=len) 
'aaaaaaaa' 
>>> len(max(list1, key=len)) 
8 
>>> 

편집 :

내 위의 솔루션은 잘 작동하지만, 내가 생각한 것보다 더 짧은 것을 제안하고 싶습니다.

>>> list1 = ['a','aa','aaa','aaaa','aaaaa','aaaaaa','aaaaaaa','aaaaaaaa',] 
>>> max(map(len, list1)) 
8 
>>> 

키 기능 대신이 솔루션은 map을 사용합니다. 이 이상적인 해답이 될 않을 수도 있지만 의도는 코드를 제공했다 : 소트와

+0

오. 고맙습니다.하지만 내 코드에서 작동하지 않는 것을 말해 줄 수 있습니까? "built in ready"함수에서 사용하지 않으려 고 시도했습니다. –

+0

@RomBecker - 추적백을 포함하지 않았으므로 코드 실행에 1 초를주십시오.또한 사용하는'len'과'range'는 "ready in built function"입니다. – iCodez

+0

오, 롤 내가 main() funtion을 불러 잊어 버렸습니다 .... 고맙습니다 –

-2

는이

mx=0 
for word in list1: 
    if len(word)>mx: 
     mx=len(word) 
#now max will contain the length of longest word 

편집 작업을해야 너무

sorted(list1,key=len,reverse=True)[0] 
'aaaaaaaa' 
+0

목록 정렬은 비용이 많이 들며 코드는 최대 값보다 덜 읽기 쉽습니다 – MatthieuBizien

+0

이것은 비효율적이며 도청되었습니다. 길이보다는 사전 식 순서로 정렬합니다. – user2357112

+0

cmp 속성에 대해 __len__ 함수를 사용할 수도 있습니다. – markcial

0

긴 문자열을 얻을 수 역 문제의 코드와 유사합니다.

+3

1000시에 최대? 목록에서 가장 긴 단어가 1000 자보다 짧으면 어떻게 될까요? – StephenTG

+1

max를 변수로 사용하지 마십시오. max의 경우에만 사용해야합니다. – MatthieuBizien

+1

@StephenTG, 오. 대신 0으로 초기화해야합니다. 내 잘못이야. 어쨌든 편집했습니다. –

0
def find_longest_word(): 
    list1 = ['a','aa','aaa','aaaa','aaaaa','aaaaaa','aaaaaaa','aaaaaaaa',] # this should be a parameter 
    max1 = '' 
    for x in range (0, len(list1)): # you don't have to include 0 in this 
     if (len(max1) < len(list1[x])): 
      max1 = list1[x] 
    return max1  


def main(): 
    m = find_longest_word() 
    print len(m) 

들여 쓰기가 잘못되었습니다. 여기에 붙여 넣을 수 있습니다. 동일한 구조를 가진 간단한 방법 당신은 기능과 같이

이 '(함수 find_longest_word 쓰기' ') 단어 목록을 받아 이의 길이를 반환

def find_longest_word(lst): 
    max1 = '' 
    for x in lst: 
     if (len(x) > len(max1)): 
      max1 = x 
    return max1  


def main(): 
    m = find_longest_word() 
    print len(m) 
+0

for 루프에서 수익을 얻을 필요가 있습니다. 이 경우 올바른 값을 반환하지 않습니다. – CDspace

+0

죄송합니다. 지적 해 주셔서 고맙습니다. – IanAuld

-2

이 한 번 봐 가장 길다. ''

a = ['mamao', 'abacate', 'pera', 'goiaba', 'uva', 'abacaxi', 'laranja', 'maca'] 

def find_longest_word(a): 

    d = [] 
    for c in a: 
     d.append(len(c)) 
     e = max(d) #Try "min" :D 
    for b in a: 
     if len(b) == e: 
      print "Length is %i for %s" %(len(b), b) 
+0

여러 곳에서 동일한 답변을 게시하지 마십시오. 대신 질문을 중복으로 표시하십시오. –

+0

그 사실을 알지 못했습니다. 내 잘못입니다! –

관련 문제