制作 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']
...
我查看了几个列表组合线程,但其中 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']
...