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 
>>> 

Edit:

Хотя мой выше решение работает хорошо, Я хочу предложить еще более короткий, о котором я только что подумал:

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

Вместо ключевой функции это решение использует map.

+0

oh. спасибо, но можете ли вы сказать мне, что не работает в моем коде? im пытается не использовать функции «встроенные» –

+0

@RomBecker - Ну, так как вы не включили трассировку, дайте мне одну секунду для запуска вашего кода.Кроме того, 'len' и' range', которые вы используете, «встроены в готовые функции». – iCodez

+0

oh lol Я забыл называть главное() funtion .... спасибо –

-2

с отсортированный реверс вы можете получить самую длинную строку слишком

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

Сортировка списка дорогая, и код менее читабельный, чем с max – MatthieuBizien

+0

Это неэффективно и прослушивается. Вы сортируете по лексикографическому порядку, а не по длине. – user2357112

+0

вы можете использовать функцию __len__ для атрибута cmp слишком – markcial

0

Это должно работать

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

Edit: Это не может быть идеальным ответом, но намерение было дать код, который аналогично коду.

+3

Зачем начинать max при 1000? Что, если самое длинное слово в списке короче 1000 букв? – StephenTG

+1

Пожалуйста, не используйте max как переменную, это должно быть только для функции max. – MatthieuBizien

+1

@StephenTG, ohh. Я должен был инициализировать его вместо нуля. Виноват. Так или иначе, отредактировал его. –

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) 

Ваш отступ был неправильным, хотя это может быть форматирование от вставки его здесь. Более простой способ, который имеет такую ​​же структуру, как вы действуете:

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

Взгляните на это:

«» 'Напишите функцию find_longest_word(), которая принимает список слов и возвращает длину самый длинный. '' '

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

Не знал об этом, мой плохой! –