I was asked to code a solution in Python in 15 mins. Print all possible word combinations for a given phone number. Numbers 0 and 1 will not be part of the phone number, the numbers can be repeated, phone numbers can be of any length.For example if the number is 245:All combinations of 'ABC', 'GHI' and 'JKL is:['AGJ', 'AGK', 'AGL', 'AHJ', 'AHK', 'AHL', 'AIJ', 'AIK', 'AIL', 'BGJ', 'BGK', 'BGL', 'BHJ', 'BHK', 'BHL', 'BIJ', 'BIK', 'BIL', 'CGJ', 'CGK', 'CGL', 'CHJ', 'CHK', 'CHL', 'CIJ', 'CIK', 'CIL']In 15 mins, all I could come up with was to combine 2 numbers at a time and then combine the result with the third number and so on.numbs = {'2':'ABC', '3':'DEF', '4':'GHI', '5':'JKL', '6':'MNO', '7':'PQRS', '8':'TUV', '9':'WXYZ'}def combo(phnum):    if len(phnum) == 1: return list(numbs[phnum[0]])    else: result = combo(phnum[:-1])    return [(ch1+ch2) for ch1 in result for ch2 in numbs[phnum[-1]]]After I going home, I checked out itertools and found out about product. Came up with the following one liner. Is there a better way to solve this problem?from itertools import productdef combo(phnum):    return [''.join(tup) for tup in list(product(*[numbs[ch] for ch in phnum]))]
Letter Combinations of a Phone Number
python;interview questions;combinatorics
Solution overall seems nice, although:casting to list in list comprehension is not neededproduct returns iterator, so you also may want to generate iterator if you mainly plan to iterate over possibilities I'd strongly advice using better names. Characters in source code costs nothing and maintaining code afterwards is much easierMy attempt would be:import itertoolsletters_map = {'2':'ABC', '3':'DEF', '4':'GHI', '5':'JKL',                '6':'MNO', '7':'PQRS', '8':'TUV', '9':'WXYZ'}def possible_words(phone_number):    letters_to_combine = (letters_map[digit] for digit in phone_number)    for letters_group in itertools.product(*letters_to_combine):        yield ''.join(letters_group)print list(possible_words(23567))