#python #list #filter #lowercase
#python #Список #Фильтр #нижний регистр
Вопрос:
Я пытался решить проблему в CodeWars и столкнулся с препятствием. Я знаю, что это не особенно «питонический» подход (я новичок). И я уверен, что есть более эффективные и продвинутые способы сделать это. Но я действительно просто пытаюсь понять, почему приведенный ниже код не работает. Я просто хочу сделать строковые элементы списка строчными, если они отображаются в другом списке слов фильтра. (Игнорируйте код для удаления первого элемента. Это потому, что задача требует другой обработки первого элемента).
def title_case(title, minors=''):
title = title.title()
mwds = minors.split()
lst = title.split(" ", 1)
exfirst = lst[1].split()
for wd in exfirst:
wd.lower()
if wd in mwds:
wd.lower()
return exfirst
print(title_case('a clash of KINGS', 'a an the of'))
print(title_case('THE WIND IN THE WILLOWS', 'The In'))
Результат:
['Clash', 'Of', 'Kings']
['Wind', 'In', 'The', 'Willows']
Ожидаемый результат:
['Clash', 'of', 'Kings']
['Wind', 'in', 'the', 'Willows']
Комментарии:
1. Ваш код неверно отформатирован, пожалуйста, исправьте отступ.
str.lower()
возвращает копию строки в нижнем регистре, она не изменяет исходную. Строки неизменяемы.
Ответ №1:
Это потому, что вы не назначаете новый младший для старого младшего. Чтобы назначить, вы должны использовать index в качестве итератора в exfirst списке.
for i in range(exfirst):
wd= exfirst[i].lower()
if wd in mwds:
exfirst[i] = wd
Ответ №2:
Метод lower() не изменяет символы на месте. Вы должны сделать:
wd = wd.lower()