将字符串拆分为列表中的元素

4
我正在尝试编写一个函数,返回包含所有可能组合的列表的列表。
它应该返回这个结果:
[['Moscow', 'Oslo', 'Boston', 'Berlin'],
 ['Moscow', 'Oslo', 'Sydney', 'Berlin'],
 ['Moscow', 'Paris', 'Boston', 'Berlin'],
 ['Moscow', 'Paris', 'Sydney', 'Berlin']]

当我调用这个函数时

pathway('Moscow', [['Oslo', 'Paris'], ['Boston', 'Sydney']], 'Berlin')

我得到了这个:

[['Moscow', 'Oslo, Boston', 'Berlin'],
 ['Moscow', 'Oslo, Sydney', 'Berlin'],
 ['Moscow', 'Paris, Boston', 'Berlin'],
 ['Moscow', 'Paris, Sydney', 'Berlin']]

这是我的函数:

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

如何解决?


请返回已翻译的文本:你可以像这样返回:return paths[0] - Harsha Biyani
@HarshaBiyani:这将返回一个错误的组合,而不是所有的组合。 - Scott Hunter
2个回答

4
这将精确地执行您指定的操作:
def pathway(city_from, city_array, city_to):
    return [[city_from, *c, city_to] 
           for c in itertools.product(*city_array)]

3

一个字符串看起来像列表,但它并不等同于实际的列表:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接