制作 python 列表的所有可能组合

Making all possible combination of python lists

我查看了几个列表组合线程,但其中 none 个与我在这里打算做的事情有关。

有以下列表:

traveler = ["John", "Joseph", "Mary", "Anna"]
brazil_destinations = ["Sao Paulo", "Rio de Janeiro", "Salvador", "Curitiba", "Porto Alegre", "Belo Horizonte"]
us_destinations = ["New York", "Orlando", "Miami", "Denver", "Houston", "Phoenix"]
italy_destinations = ["Rome", "Venice", "Florence"]
germany_destinations = ["Munich", "Berlin", "Bohn", "Bremen"]

我需要一份包含所有可能组合的列表(总是在每个国家选择一个旅行者和一个城市)。期望的输出是:

[["John", "Sao Paulo", "New York", "Rome", "Munich"],
["John", "Sao Paulo", "New York", "Rome", "Berlin"],
["John", "Sao Paulo", "New York", "Rome", "Bohn"],
["John", "Sao Paulo", "New York", "Rome", "Bremen"],
["John", "Sao Paulo", "New York", "Venice", "Munich"],
["John", "Sao Paulo", "New York", "Venice", "Berlin"],
[...],
[...],
[...]]

注意 1:我需要国家/地区列表数量的灵活性。在这种情况下,有 4 个国家/地区列表(巴西、美国、意大利和德国),但这可能会经常更改。

注意 2:它必须是高效的,因此具有递归函数的解决方案可能是最合适的。不幸的是,我无法将其编码。

非常感谢!

您可以使用 itertools.product:

from itertools import product

traveler = ["John", "Joseph", "Mary", "Anna"]
brazil_destinations = [
    "Sao Paulo",
    "Rio de Janeiro",
    "Salvador",
    "Curitiba",
    "Porto Alegre",
    "Belo Horizonte",
]
us_destinations = [
    "New York",
    "Orlando",
    "Miami",
    "Denver",
    "Houston",
    "Phoenix",
]
italy_destinations = ["Rome", "Venice", "Florence"]
germany_destinations = ["Munich", "Berlin", "Bohn", "Bremen"]

out = []
for c in product(
    traveler,
    brazil_destinations,
    us_destinations,
    italy_destinations,
    germany_destinations,
):
    out.append(list(c))

print(*out, sep="\n")

打印:

['John', 'Sao Paulo', 'New York', 'Rome', 'Munich']
['John', 'Sao Paulo', 'New York', 'Rome', 'Berlin']
['John', 'Sao Paulo', 'New York', 'Rome', 'Bohn']
['John', 'Sao Paulo', 'New York', 'Rome', 'Bremen']
['John', 'Sao Paulo', 'New York', 'Venice', 'Munich']

...