Skip to main content
 首页 » 编程设计

python之找到元组对的所有可能组合,将每个组合合并成新序列

2025年05月04日14jillzhang

我有一条公交路线按以下顺序(地点序列)行驶:-

Ayr - Newton - Troon - Paisley - Glasgow 

即 route = ['Ayr', 'Newton', 'Troon', 'Paisley', 'Glasgow']

我需要找到所有可能的方式来拆分旅程(总是从 Ayr 开始到 Glasgow 结束,所以我有代码 (python) 可以找到每对组合并将每对(元组)附加到列表中。

pairs = [('Ayr', 'Newton'),('Ayr', 'Troon'),('Ayr', 'Paisley'),('Ayr', 'Glasgow'),('Newton', 'Troon'),('Newton', 'Paisley'),('Newton', 'Glasgow'),('Troon', 'Paisley'),('Troon', 'Glasgow'),('Paisley', 'Glasgow')] 

我想要结束的是一个列表列表或元组列表(或最快的最有效内存序列),其中包含所有可能的对组合(从 Ayr 开始到 Glasgow 结束)。

final_splits = [['Ayr', 'Glasgow'], ['Ayr', 'Newton', 'Glasgow'], ['Ayr', 'Newton', 'Troon', 'Glasgow'], ['Ayr', 'Newton', 'Troon', 'Paisley', 'Glasgow'], ['Ayr', 'Troon', 'Glasgow'], ['Ayr', 'Troon', 'Glasgow'], ['Ayr', 'Troon', 'Paisley', 'Glasgow']..........etc] 

不容易啊!谁能帮忙?

请您参考如下方法:

假设每个组合都会成对出现,则无需计算中间步骤

>>> from itertools import combinations 
>>> route = ['Ayr', 'Newton', 'Troon', 'Paisley', 'Glasgow'] 
>>> [(route[0],)+x+(route[-1],) for i in range(len(route)-1) for x in combinations(route[1:-1],i)] 
[('Ayr', 'Glasgow'), ('Ayr', 'Newton', 'Glasgow'), ('Ayr', 'Troon', 'Glasgow'), ('Ayr', 'Paisley', 'Glasgow'), ('Ayr', 'Newton', 'Troon', 'Glasgow'), ('Ayr', 'Newton', 'Paisley', 'Glasgow'), ('Ayr', 'Troon', 'Paisley', 'Glasgow'), ('Ayr', 'Newton', 'Troon', 'Paisley', 'Glasgow')]