Must be missing something obvious, but why does this simple loop fail to modify the list items?
for artist in artists:
artist = artist.replace(': ', '')
artists = [': Terence Trent D Arby', ": Guns N' Roses", ': Sinead O Connor' ...]
The loop control variable is just a local variable, referencing the elements of the list. If you re-assign that variable to any other object, it will no longer reference the original object in the list. So, assigning the artist to another object, doesn't make the reference in the list also to point to the new object.
To do what you want, you can create a new list with modified value, and assign it to original list reference. A list comprehension would be useful here:
artists = [artist.replace(': ', '') for artist in artists]
As Rohit said, artist is not a reference to the list item, so either you use a list comprehension, as suggested, which is the cleanest way IMO, either you do it "old school" like this, just to make you understand how it works behind the list comprehension Rohit gave you:
for index,artist in enumerate(artists):
artists[index] = artist.replace(': ', '')
But I would do it this way:
artists = [artist[2:] for artist in artists]
ONLY if all you list items always start with ": " of course. Slicing might be faster than replacing.