не срабатывает условие проверки строк

Прошу помощи: дана строка 1: 'a clash of KINGS' и строка 2: 'a an the of' нужно получить: 'A Clash of Kings' т.е. сделать заглавными первую букву каждого слова из первой строки, кроме тех слов, что есть во второй строке. мой код:

def title_case(s, d=''):
    s1 = [i.title() if i.casefold() not in d.casefold() else i.lower() for i in s.split()]
    s2 = ' '.join(s1)
    return (s2[:1].upper()+s2[1:])

работает на всех примерах кроме примера: 'First a of in', 'an often into', должен получить 'First A Of In', полуачет: 'First a of in' и не могу понять почему..


Ответы (1 шт):

Автор решения: CrazyElf

На ошибку вам уже указали (нужно делить вторую строку по пробелам и искать точные совпадения, а не in), вот ещё для примера "однострочник", который всё это делает (разбитый на 3 строки для удобства просмотра):

def title_case(s, d=''):
    return ' '.join(x.title() if not i or \
                    all(x.casefold() != y.casefold() for y in d.split()) \
                    else x.lower() for i, x in enumerate(s.split()))

print(title_case('a clash of KINGS', 'a an the of'))
print(title_case('First a of in', 'an often into'))

Вывод:

A Clash of Kings
First A Of In
→ Ссылка