Тут есть масса вариантов на самом деле. Выбираю самые простые (для понимания).
Если количество букв в bukva больше средней длины вводимого слова (slovo), то тогда имеет смысл:
slovo = '0'
arr = []
marr = []
bukva = [u'w']
while True:
slovo = raw_input(u'Введите слово: ').decode('cp1251')
if not slovo: break
list_append = marr
for chr_ in slovo:
if chr_ in bukva:
list_append = arr
break
list_append.append(slovo)
Если же ситуация обратна (как в Вашем примере), то лучше проходить по списку и искать букву в слове
slovo = '0'
arr = []
marr = []
bukva = [u'w']
while True:
slovo = raw_input(u'Введите слово: ').decode('cp1251')
if not slovo: break
list_append = marr
for chr_ in bukva:
if chr_ in slovo:
list_append = arr
break
list_append.append(slovo)
P.S. Если я правильно понял, то это учебный пример, так как реально такие вещи решаются с помощью регулярных выражений.