I'm using a set for the second list so that you don't have to iterate every time over all it's items.
a = ['hello', 'Hello', 'Hi', 'Greetings', 'Hola']
b = ['world', 'World', 'Planet', 'Earth']
b_set = set(b)
needle = 'HelloWorld'
for start in a:
if needle.startswith(start) and needle[len(start):] in b_set:
print 'match'
If you are looking for a shorter version
any((needle[len(start):] in b_set for start in a if needle.startswith(start)))
In contrast to the itertools.product
this solution does not have to compare all n^2
possible combinations, but has just to walk once over the first list (n
) and in worst case do an additional set lookup.