2013-02-15 1 views
0

, если у меня есть список strings-Как сравнить два списка слов, изменить общие слова и напечатать результат в python?

common = ['the','in','a','for','is'] 

и у меня есть предложение распались в list-

lst = ['the', 'man', 'is', 'in', 'the', 'barrel'] 

как я могу сравнить два, и если есть какие-либо слова в общем , затем снова напечатайте полную строку как заголовок. У меня есть часть его работы, но мой конечный результат печатает недавно измененные в общих строках, а также оригинал.

new_title = lst.pop(0).title() 
for word in lst: 
    for word2 in common: 
     if word == word2: 
      new_title = new_title + ' ' + word 

    new_title = new_title + ' ' + word.title() 

print(new_title) 

выход:

The Man is Is in In the The Barrel 

поэтому я стараюсь, чтобы получить его так, чтобы нижний регистр слов в общем, остаются в новом предложении, без оригиналов, так и без них изменения в заглавным ,

+0

Я думаю, вам нужно уточнить это - то, что является ожидаемым результатом если 'common =' ... 0), как и сейчас, 1) '[]', 2) '['is']' и 3) '= lst' –

+0

жаль, что не ясна. в основном пытается создать заголовок, где общие слова хранятся в нижнем регистре. Общие слова были в отдельном списке, а название - любая строка, переданная в мою функцию. хотя я работал над тем, чтобы отделить общие слова и перепечатать его с помощью строки под заголовком, я застрял в том, как я мог бы реформировать свое предложение, не увеличивая удвоение найденных общих слов. (ps также забыл поставить «is» в исходном общем списке, oops) благодаря всем за вашу помощь. – Malvek

ответ

4
>>> new_title = ' '.join(w.title() if w not in common else w for w in lst) 
>>> new_title = new_title[0].capitalize() + new_title[1:] 
'The Man Is in the Barrel' 
+0

спасибо. это сработало и действительно помогло с моим заданием. – Malvek

+0

@ GP89 Нет, вызывая 'capizeize()' на всей строке, будет строчная буква, отличная от первой. – bdesham

0

Если все, что вы пытаетесь сделать, чтобы увидеть ли какой-либо из элементов lst появляются в common, вы можете сделать

>>> common = ['the','in','a','for'] 
>>> lst = ['the', 'man', 'is', 'in', 'the', 'barrel'] 
>>> list(set(common).intersection(lst)) 
['the', 'in'] 

и просто проверить, есть ли результирующий список любой элементов в нем.

Если вы хотите, чтобы слова в common быть строчными, и вы хотите, чтобы все другие слова, чтобы быть в верхнем регистре, сделать что-то вроде этого:

def title_case(words): 
    common = {'the','in','a','for'} 
    partial = ' '.join(word.title() if word not in common else word for word in words) 
    return partial[0].capitalize() + partial[1:] 

words = ['the', 'man', 'is', 'in', 'the', 'barrel'] 
title_case(words) # gives "The Man Is in the Barrel" 
+0

Спасибо за оба объяснения. – Malvek

+0

@Malvek проблем нет. На стороне примечания, если ваш вопрос о переполнении стека связан с заданием домашней работы, лучше сказать, что впереди, чтобы люди помогли вам понять проблему, а не просто сделать для вас работу :-) – bdesham