#python #string
#python #строка
Вопрос:
Как я могу заставить эту функцию Python возвращать строку вместо списка, содержащего одну строку?
def num_vowels(s):
""" returns the number of vowels in the string s
input: s is a string of 0 or more lowercase letters
"""
if s == '':
return 0
else:
num_in_rest = num_vowels(s[1:])
if s[0] in 'aeiou':
return 1 num_in_rest
else:
return 0 num_in_rest
#most vowels returns a list not a string
def most_vowels(wordlist):
'''Takes a list of strings called wordlist and returns the string in
the list with the most vowels.'''
list_of_num_vowels = [num_vowels(x) for x in wordlist]
max_val = max(list_of_num_vowels)
return [x for x in wordlist if num_vowels(x) == max_val]
Некоторые тестовые примеры:
most_vowels(['vowels', 'are', 'amazing', 'things'])
вывод: 'amazing'
most_vowels(['obama', 'bush', 'clinton'])
вывод: 'obama'
Спасибо!
Комментарии:
1. пожалуйста, используйте форматирование кода, делая отступ в строке на четыре пробела для лучшей читаемости
2. Спасибо, кто отредактировал форматирование, я все еще пытаюсь разобраться.
3. Работают ли приведенные примеры?
4.
return list_with_one_element[0]
5. В моей функции они выводят [‘amazing’] и [‘obama’], когда они должны выводить, как это показано (‘amazing’ и ‘obama’).
Ответ №1:
ваша most_vowels()
функция использует понимание списка для фильтрации совпадающих значений и возврата нового списка. Вы можете вывести строку напрямую двумя способами.
Первый способ — проиндексировать первый результат из результата понимания.
return [x for x in wordlist if num_vowels(x) == max_val][0]
Другой вариант, если вы считаете, что можете получить несколько результатов, но все еще хотите строку, — это объединить любые результаты с запятой (или другим разделителем) в строку.
return ','.join([x for x in wordlist if num_vowels(x) == max_val])
Это преобразуется ['first', 'second']
в 'first,second'
.
Комментарии:
1. Именно то, что я хотел! Спасибо. 🙂
2. Я поддержал и пометил как правильный. Почему мой пост был так сильно отклонен? Пытаюсь научиться пользоваться сайтом извините, мое форматирование не было отличным .. люди — придурки.
3. Не расстраивайтесь. Скорее всего, это было сочетание форматирования и того факта, что ответом является очень простое индексирование списка python. Люди не придурки, они просто не считают, что это ценный вопрос.
Ответ №2:
Ваша most_vowels
функция как бы заново изобретает колесо. Python уже предоставил вам гораздо более простое средство для этого — использовать max
с необязательным key
аргументом и просто выбирать слово с наибольшим количеством гласных:
def most_vowels(wordlist):
return max(wordlist, key=num_vowels)
Ответ №3:
Вы можете получить ответ прямо из max
, сравнив количество гласных вместо обычного порядка для строк, передав num_vowels
как key
:
def most_vowels(wordlist):
return max(worldlist, key=num_vowels)
В качестве альтернативы, способ, которым вы нашли наибольшее количество гласных, max_val
который вы могли бы использовать next
с фильтром понимания:
return next(word for word in wordlist
if num_vowels(word) == max_val)