Just throwing this map
version in. List comprehensions are more Pythonic, but here's an alternate.
>>> list1 = ["aa", "bb", "cc"]
>>> list2 = ["dd", "ee", "ffg"]
>>> map("".join, zip(list1, list2))
['aadd', 'bbee', 'ccffg']
You can even create a generator out of this one.
>>> from itertools import izip, imap
>>> final = imap("".join, izip(list1, list2))
>>> next(final)
'aadd'
>>> next(final)
'bbee'
Here are some timing results for the three different solutions. (The generator one beats everyone)
>>> timeit('[a+b for a, b in zip(list1, list2)]', 'list1 = ["aa", "bb", "cc"]*100; list2 = ["dd", "ee", "ffg"]*100', number=10000)
0.4470004917966719
>>> timeit('map("".join, zip(list1, list2))', 'list1 = ["aa", "bb", "cc"]*100; list2 = ["dd", "ee", "ffg"]*100', number=10000)
0.43502864982517053
>>> timeit('imap("".join, izip(list1, list2))', 'from itertools import imap, izip; list1 = ["aa", "bb", "cc"]*100; list2 = ["dd", "ee", "ffg"]*100', number=10000)
0.011020268755800089
>>> timeit('[a+b for a, b in izip(list1, list2)]', 'from itertools import izip; list1 = ["aa", "bb", "cc"]*100; list2 = ["dd", "ee", "ffg"]*100', number=10000)
0.32172862839627214
>>> timeit('map(lambda x,y: x + y, list1, list2)', 'list1 = ["aa", "bb", "cc"]*100; list2 = ["dd", "ee", "ffg"]*100', number=10000)
0.5423113458890612