class ListFormatter(dict):
    def set(self, *i, left='', right=''):
        self[i] = left, right
    def format_list(self, array):
        a = list(map(str, array))
        for key, values in self.items():
            for i in key:
                a[i] = a[i].join(values)
        return ''.join(a)
x = ListFormatter()
match n := len(a):
    case 1: ...
    case 2: x.set(0, right=' and ')
    case _:
        x.set(*range(n - 1), right=', ')
        x.set(-1, left='and ')
s = x.format_list(a)