The problem is that str.replace replaces one substring with a replacement substring. That's what the error means: it wants a substring, and you gave it a list of separate characters.
You could loop over the replacement pairs, calling replace for each one:
>>> s = '123'
>>> for search, replace in zip(search_array, replace_array):
... s = s.replace(search, replace)
>>> s
'abc'
Or you could just use str.translate, which actually does do what you want, although it requires a bit of setup:
>>> search_array = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
>>> replace_array = ["a", "b", "c", "d", "d", "e", "f", "g", "h", "i"]
>>> trans = str.maketrans(dict(zip(search_array, replace_array)))
>>> '123'.translate(trans)
'abc'
Or, alternatively, and probably more readable:
>>> search = "1234567890"
>>> replace = "abcddefghi"
>>> trans = str.maketrans(search, replace)
>>> '123'.translate(trans)
'abc'
By the way, if it isn't intentional that you specified d twice in a row, it might be clearer (and harder to make that typo!) to specify the letters like this:
>>> replace = string.ascii_lowercase[:10]
str.replace, what it does is replace one substring with another substring."d"twice in a row?