import timeit
import re

a=["aa","bb","cc"]
b="111^222^3333^44444"
def f1():
    m=b.split("^")
    s=''
    for i in range(len(a)):
        s+=m[i]
        s+=a[i]
    s+=m[-1]
    return s

def f2():
    m=b.split("^")
    s=[]
    for i in range(len(a)):
        s.append(m[i])
        s.append(a[i])
    s.append(m[-1])
    return "".join(s)

def f3():
    m=b.split("^")
    return "".join(m[i]+a[i] for i in range(len(a)))+m[-1]

r=re.compile("\^")
def f4():
    s=""
    i=0
    for t,m in enumerate(r.finditer(b)):
        s+=b[i:m.start()]+a[t]
        i=m.end()
    s+=b[i:]
    return s

def f5():
    s=b
    for x in a:
        s=s.replace("^",x,1)
    return s


print(f1(),f2(),f3(),f4(),f5())

print(f"f1: {timeit.timeit(f1,number=100000,globals=globals())}")
print(f"f2: {timeit.timeit(f2,number=100000,globals=globals())}")
print(f"f3: {timeit.timeit(f3,number=100000,globals=globals())}")
print(f"f4: {timeit.timeit(f4,number=100000,globals=globals())}")
print(f"f5: {timeit.timeit(f5,number=100000,globals=globals())}")
