You can also iterate backwards over the list:
for name in reversed(names):
if name[-5:] == 'Smith':
names.remove(name)
This has the advantage that it does not create a new list (like filter or a list comprehension) and uses an iterator instead of a list copy (like [:]).
Note that although removing elements while iterating backwards is safe, inserting them is somewhat trickier.