This is probably a job for regex, but you can do it with .join, you just need to use a list comprehension with a test.
If the input string never ends in a non-alpha character you could do this:
data = ("ABC", "-ABC", "AB-C")
for s in data:
t = ''.join([c + ',' if c.isalpha() else c for c in s])[:-1]
print('{!r}\t-> {!r}'.format(s, t))
output
'ABC' -> 'A,B,C'
'-ABC' -> '-A,B,C'
'AB-C-' -> 'A,B,-C,-'
I admit that the [:-1] is a bit kludgy, but it's probably more efficient than doing an index check on every char to see if it's at the end of the string.
If the input string can end in a non-alpha character, we can do this:
data = ("ABC", "-ABC", "AB-C", "A-BC-")
for s in data:
t = ''.join([c + ',' if c.isalpha() else c for c in s[:-1]] + [s[-1]])
print('{!r}\t-> {!r}'.format(s, t))
output
'ABC' -> 'A,B,C'
'-ABC' -> '-A,B,C'
'AB-C' -> 'A,B,-C'
'A-BC-' -> 'A,-B,C,-'
Ok, it's probably kludgier than the first version, but hey, it works. :)
As I said earlier, a regex substitution is probably the sane way to do this.