As mentioned in other answers, the reason the filename list doesn't change is because your code doesn't change it. There's a number of ways of fixing that, including building a new list and replacing the original with it.
I think the simplest approach would be to just modify the list as you're iterating over its elements (but you have to be careful when doing this that you don't modify parts of the list not yet seen). Python has a built-in function called enumerate() which makes this kind of task easy to code. What enumerate() does is return an "iterator" object which counts out the items as it provides each one from the sequence -- so the count is also the item's index in that sequence, and when necessary that index can be used to update the corresponding list element.
Since your code is dealing with filenames, it could be improved further by making use of the built-in module named os.path which is available for dealing with paths and filenames. That module has a splitext() function for breaking filenames into two parts, the "root" and the extension. It's called root instead of filename in the documentation because it could have directory path information prefixed onto it.
If your code was rewritten using enumerate() and os.path.splitext() it might look something like this:
import os
projectFilenames = ['2010-10-30-markdown-example.txt',
'2010-12-29-hello-world.mdown',
'2011-1-1-tester.markdown']
for i,f in enumerate(projectFilenames):
root,ext = os.path.splitext(f)
if ext in ('.txt', '.mdown', '.markdown'):
projectFilenames[i] = root # update filename list leaving ext off
print projectFilenames
# ['2010-10-30-markdown-example', '2010-12-29-hello-world', '2011-1-1-tester']
If you wanted to remove all file extensions, not just specific ones, you could just change the if ext in ('.txt', '.mdown', '.markdown'): to just if ext:.