Как изменять элементы списка?
for f in foo:
    f = 'bla-bla-bla'f - это всего лишь переменная, которая ссылается на элемент итерируемого объекта. Изменяя значение f ты лишь меняешь на какой элемент она будет ссылаться, а не сам элемент итерируемого объекта.
Если ты хочешь поменять элемент объекта, то делать это нужно (на самом деле не нужно, только если ну очень уж хочется) примерно так:>>> foo = [1,2,3,4,5,6]
>>> for key, value in enumerate(foo):
...     foo[key] = value * value
...
>>> foo
[1, 4, 9, 16, 25, 36]
В таких случаях часто используются генераторы списков (list comprehension). Они как раз позволят заполнить список без создания этих промежуточных переменных. И данная функция будет выглядеть например так:def accum(s):
    b = [(i+1) * a for i, a in enumerate(s)]
    return '-'.join([i.title() for i in b])