I'm trying to write a function that returns list of lists with all possible combination.
It's supposed to return this:
[['Moscow', 'Oslo', 'Boston', 'Berlin'],
 ['Moscow', 'Oslo', 'Sydney', 'Berlin'],
 ['Moscow', 'Paris', 'Boston', 'Berlin'],
 ['Moscow', 'Paris', 'Sydney', 'Berlin']]
and when I call the function
pathway('Moscow', [['Oslo', 'Paris'], ['Boston', 'Sydney']], 'Berlin')
I get this:
[['Moscow', 'Oslo, Boston', 'Berlin'],
 ['Moscow', 'Oslo, Sydney', 'Berlin'],
 ['Moscow', 'Paris, Boston', 'Berlin'],
 ['Moscow', 'Paris, Sydney', 'Berlin']]
Here is my function:
def pathway(city_from, city_array, city_to):
    paths = []
    cities = itertools.product(*city_array)
    cities = [', '.join(map(str, x)) for x in cities]
    for i in cities:
        i = str(i)
        path = city_from, i, city_to
        paths.append(list(path))
    return paths
How can it be fixed?
This will do precisely what you specified:
def pathway(city_from, city_array, city_to):
    return [[city_from, *c, city_to] 
           for c in itertools.product(*city_array)]
A string whose contents looks like a list is not the same as an actual list:
def pathway(city_from, city_array, city_to):
    paths = []
    cities = itertools.product(*city_array)
    for i in cities:
        path = [city_from] + list(i) + [city_to]
        paths.append(list(path))
    return paths
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With